编辑:感谢barnyr我有平均秒数,所以现在我只需要将其转换为正确的格式。不幸的是,Peter注意到的Coldfusion函数只占用了一个日期时间对象,所以我又回到了转换的困境。
我有一个双重问题。我需要生成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>
我需要知道如何/在何处进行平均,以及如何获得所需格式的年/月/周值。日期数学绝对不是我最好的科目!感谢。
答案 0 :(得分: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
答案 1 :(得分:0)
我建议使用sql server中的datediff
函数来获取秒数。然后在ColdFusion中你不使用timeformat,你做数学。 Timeformat()
接受一个datetime对象并返回一个字符串。