ColdFusion DateDiff - 有更好的方法吗?
ColdFusion DateDiff - Is there a better way?
我只是想结合我团队中不同成员的总服务年限。下面的脚本工作正常,但是,每个成员的雇用日期不会从数据库中提取。这意味着我必须对每个人的 hiredate 进行硬编码,然后对他们进行 DateDiff。拥有 28 名成员的团队会导致代码管理噩梦。
我的主要目标是使代码更简单、更高效,尤其是在管理 28 名团队成员时。如果路径的一部分需要将用户的hiredate添加到数据库中;我能做到。我只是看到下面的代码需要重写,我只是不知道最好的方法。
有没有更好的方法?
<cfscript>
REQUEST.rightnow = Now();
dateBob = DateDiff("yyyy", "1996 02 01", REQUEST.rightnow);
dateSam = DateDiff("yyyy", "1996 08 01", REQUEST.rightnow);
dateJoe = DateDiff("yyyy", "2004 12 01", REQUEST.rightnow);
dateJohn = DateDiff("yyyy", "2001 01 01", REQUEST.rightnow);
combinedDate = (dateBob + dateSam + dateJoe + dateJohn);
</cfscript>
<cfoutput>
#combinedDate# total years<br>
#dateBob# years<br>
#dateSam# years<br>
#dateJoe# years<br>
#dateJohn# years<br>
</cfoutput>
--- 编辑 ---
按照 Matt 的建议作为数据库查询;是这样的吗?
SELECT hire_date,
ROUND((DATEDIFF(NOW(),hire_date)) / 365) AS dateDiff
FROM members
WHERE hire_date IS NOT NULL
--- 编辑 2 ---
我刚刚意识到我忘记添加所有 "dateDiff" 的 SUM()。如果有人使用这个 SQL,我想你必须把它交给 ColdFusion。除非我在 SQL?
中忽略了一种方法--- 编辑 3 ---
Per Leigh 的鼓励评论;我找到了更好的方法。 TIMESTAMPDIFF() MySQL 函数添加了一个 unit 变量,它可以是日、月、年等。这允许我删除 /365 和 ROUND()。这反过来又允许我使用 SUM() 而不会从 MySQL 中得到语法错误。我还将我的别名从 dateDiff 重命名为 Dif,因为我想避免与 DATEDIFF() 混淆。
见下文。 :D
SELECT hire_date,
SUM(TIMESTAMPDIFF(YEAR,hire_date,NOW())) AS Dif
FROM members
WHERE hire_date IS NOT NULL
改进代码的解决方案 posted for ColdFusion 实际上是替换它。通过将每个成员的 hire_dates 添加到现有的 MySQL 数据库并编写下面的查询;我不再需要原始 post.
中的所有 ColdFusion 代码SELECT SUM(TIMESTAMPDIFF(YEAR,hire_date,NOW())) AS Dif
FROM members
WHERE hire_date IS NOT NULL