【问题标题】:Get total time and create an average based on timestamps获取总时间并根据时间戳创建平均值
【发布时间】:2015-05-11 17:14:48
【问题描述】:

背景:我想使用 Coldfusion 来计算一个过程所花费的总时间,方法是获取两个时间戳,然后将所有总时间相加以创建一个平均值。

问题:获取两个时间戳并以分钟为单位找出时间差的最佳方法是什么。

示例:

Time Stamp #1:  2015-05-08 15:44:00.000
Time Stamp #2:  2015-05-11 08:52:00.000

所以上述时间戳之间的时间为: 2 天 6 小时 52 分钟 = 3,292 分钟

我想在少数几个时间戳上运行此转换,然后将总分钟数除以得到平均值。

为我的问题添加更多信息。 1. 是的,这些值来自数据库 MSSQL。 2. 我实际上将使用个体时间差异和显示和总体平均值。因此,在我的 for 循环中,每一行的值都类似于 3,292(转换为分钟或小时或天),并且在 for 循环结束时,我想显示页面上显示的所有行的平均值。让我知道是否需要添加任何其他信息。

【问题讨论】:

  • 这听起来像是应该存储在数据库中的数据
  • 造成你困难的部分是什么?
  • 这可以通过多种方式解决,但这取决于您未提供的信息。 1、这两个时间戳的来源是什么——一个数据库表?如果是这样,您的 DBMS 是什么? 2. 总体目标是什么 - 生成单个总体平均值或检索所有时间戳 plus 生成总体平均值?要生成单个平均值,请使用 SQL 函数。这些因 DBMS 而异,因此在不了解更多信息的情况下,我的建议是查看您的数据库版本的 DateDiff 和 A​​VG(平均)函数。
  • Leigh 我已根据您的评论在我的问题中添加了更多信息。

标签: math time coldfusion


【解决方案1】:

假设您的查询已正确排序,这样的事情应该可以工作。

totalMinutes = 0;
for (i = 2; i <= yourQuery.recordcount; i++)
totalMinutes += 
    DateDiff('n'
    , yourQuery.timestampField[i-1]
    ,yourQuery.timestampField[i]);

avgMinutes = totalMinutes / (yourQuery.recordcount -1);  

【讨论】:

  • 只是出于好奇,为什么将“i”设置为 22?
  • 技术术语是“错误”。
  • 哈哈。谢谢。您的示例非常有助于理解如何使用 DateDiff。 +1 已选中。
【解决方案2】:

使用dateDiff() 函数

diffInMinutes = dateDiff('n', date1, date2);

【讨论】:

  • 是的,某种 DateDiff 函数将成为解决方案的一部分。虽然不一定是 CF 的那个函数的版本。如果值存储在数据库中 - 目标是生成 single 总计 - 那么使用数据库函数会更有效。但是,OP 对这些值的来源不是很清楚——或者他们尝试过什么——所以很难说......
  • Leigh 我很抱歉不清楚。您是正确的,这些值来自 MSSQL 数据库。是否可以在查询中进行这种类型的计算?与从数据库中获取值并在我的 for 循环中进行计算相比,这种方式会更有效吗?
  • @Denoteone - 这取决于。我的问题是你是否甚至需要一个循环。答案取决于你的目标。如果您只需要一个总数,那么拉一堆记录并在 CF 中循环是没有意义的。您可以在单个 SQL 查询中更有效地计算总数并返回单个值。但是,如果您确实需要显示这些记录(加上总计),那么循环更有意义,因为您实际上是在使用从数据库中检索到的数据。有意义吗?
  • 如果你只需要一个总数 换句话说,当你真正需要的只是一个数字(它可以用 SQL 完成)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 2022-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
相关资源
最近更新 更多