1

编辑:多亏了 barnyr,我得到了以秒为单位的平均值,所以现在我只需要将其转换为正确的格式。不幸的是,Peter 提到的 Coldfusion 函数只接受一个 datetime 对象,所以我又被转换难住了。

我有两个问题。我需要生成 Y 用户完成任务的平均时间,然后以特定格式显示结果:x 年 x 月 x 周 x 天 x 小时 x 分钟 x 秒。

我的后端数据库是 SQL Server 2008,我通过 Coldfusion 10 运行查询。两列都是日期时间字段。

查询是(类似于):

SELECT    Started_Date, Completed_Date
FROM      tbl_progress
WHERE     0=0

然后我需要遍历查询结果,获取 Completed_Date 和 Started_Date 之间的差异(即持续时间),对结果进行平均,然后按上述方式显示。

从 Stackoverflow 上的另一个线程我得到了以下代码,但它只适用于所需格式的天/小时/分钟/秒部分。

<cfloop query="complete_time">
    <cfset completed = ParseDateTime(complete_time.Completed_Date) />
    <cfset started = ParseDateTime(complete_time.Started_Date) />
    <cfset difference = (completed - started) /> 
    <cfset fixed_diff = Fix(difference) />  
    <cfset days = fixed_diff /> 
    <cfset hours = TimeFormat(difference, "H") /> 
    <cfset minutes = TimeFormat(difference, "m") />  
    <cfset seconds = TimeFormat(difference, "s")/ >
</cfloop>

我需要知道如何/在哪里进行平均,以及如何获得所需格式的年/月/周值。日期数学绝对不是我最好的科目!谢谢。

4

2 回答 2

3

如果可以的话,我会在数据库中完成工作:

SELECT    Started_Date, 
          Completed_Date, 
          DATEDIFF(Second, Started_Date, Completed_Date) AS sec_diff
FROM      tbl_progress

然后,您可以在 ColdFusion 中将秒计算为分钟、小时等。

在处理结果时,您可以总结这些sec_diff值。然后将它们除以结果集中的行数。

您还可以平均查询中的结果。看看 SQL 的AVG()函数。

我不在 SQL 服务器附近,但您可以使用以下内容:

SELECT    Started_Date, 
          Completed_Date, 
          DATEDIFF(Second, Started_Date, Completed_Date) AS sec_diff,
          AVG(DATEDIFF(Second, Started_Date, Completed_Date)) AS average_task_time
FROM      tbl_progress
于 2012-11-30T17:56:10.510 回答
0

我建议使用datediffsql server 中的函数来获取秒数。然后在 ColdFusion 中,您不使用时间格式,而是进行数学运算。 Timeformat()接受一个日期时间对象并返回一个字符串。

于 2012-11-30T17:55:02.727 回答