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