【问题标题】:Calculating total time between sets of date-times计算日期时间集之间的总时间
【发布时间】:2017-04-12 11:35:56
【问题描述】:

我什至不知道如何正确表达这个问题,但我正在尝试计算设备开启的总时间。我有一个 mysql 数据库,它记录设备开启或关闭的时间。

我的数据库的示例:

  device id             logtime           status
---------------------------------------------------
17x1p14e6662  April 12th 2017, 1:05:52 pm   ON
17x1p14e6662  April 12th 2017, 1:06:34 pm   OFF
17x1p14e6662  April 12th 2017, 1:07:02 pm   ON
17x1p14e6662  April 12th 2017, 1:14:00 pm   OFF
17x1p14e6662  April 12th 2017, 1:34:52 pm   ON
17x1p14e6662  April 12th 2017, 3:25:20 pm   OFF
17x1p14e6662  April 12th 2017, 5:30:00 pm   ON

我知道如何使用 momentJS 计算两个时间段之间的差异,类似这样(引用自 Get the time difference between two datetimes):

var now  = "04/09/2013 15:00:00";
var then = "02/09/2013 14:20:30";

var ms = moment(now,"DD/MM/YYYY HH:mm:ss").diff(moment(then,"DD/MM/YYYY HH:mm:ss"));
var d = moment.duration(ms);
var s = Math.floor(d.asHours()) + moment.utc(ms).format(":mm:ss");

如果我检索一个设备的所有记录,我怎样才能只计算每个“ON”和“OFF”之间的总时间?

【问题讨论】:

  • 每个“ON”时间也是“OFF”时间吗?
  • 是的,它总是交替出现,每个“ON”后面都会跟着“OFF”。
  • 那么你为什么不创建一个所有“ON”和一个“OFF”时间的数组。然后遍历它们并计算差异......
  • “ON”和“OFF”的记录数不一样怎么办?例如,如果一个设备仍然是“ON”,那么不会有“OFF”记录吗?另外,我是初学者,我什至不知道如何从那个大声笑开始。
  • 这就是我在第一个问题中所要求的...... :) 所以没有相同的数字......问题就是你想要做的。您可以计算到现在的时间或停止计算。那是你的选择:)

标签: php jquery mysql momentjs


【解决方案1】:

步骤

  1. 您需要 2 个阵列。一种是所有时间为“ON”,一种是所有时间为“OFF”。
  2. 在“ON”上循环。
  3. 检查“OFF”数组的索引是否有值。
  4. 如果是,计算时间并加上。
  5. 如果否,则获取当前时间并进行计算和添加。
  6. 完成:D

【讨论】:

  • 谢谢,这对我来说应该足够了。感谢您的帮助。
  • 没问题,有什么问题就问吧:)
【解决方案2】:

正如@JanickFischer 在您的 cmets 中所写,您需要总结各个周期。由于您没有发布任何有关如何读取数据/将数据存储在数组中的代码,我将提供以下一般工作流程:

第 1 步:将数组除以 ONOFF

第 2 步:比较数组的长度

  • 2a) 如果相等:设备当前处于关闭状态,您可以只计算各个开关周期的总和(例如 (datetimeOff[0] - datetimeOn[0]) + (datetimeOff[1] - datetimeOn[1]) ) + (...),括号只是为了便于阅读)
  • 2b) 如果 count(ONs) = count(OFFs) + 1: 设备当前处于开启状态,您可以将当前日期时间添加到您的 off 数组并使用与 2a 相同的过程
  • 2c) 如果 count(ONs) > count(OFFs) + 1:检查数据是否存在空白
  • 2d) if count(OFFs) > count(ONs):检查您的数据是否存在空白

【讨论】:

  • 非常感谢 ccKep。我会使用你建议的工作流程,它给了我足够的帮助:) 非常感谢。
猜你喜欢
  • 2012-01-31
  • 1970-01-01
  • 2011-01-02
  • 2010-09-17
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 2013-05-28
  • 2013-12-06
相关资源
最近更新 更多