计算日期时间之间的总时间

时间:2017-04-12 11:35:56

标签: php jquery mysql momentjs

我甚至不知道如何正确地说出问题,但我正在尝试计算设备开机的总时间。我有一个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" ?

2 个答案:

答案 0 :(得分:0)

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

第1步:按ONOFF

划分数组

第2步:比较数组的长度

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

答案 1 :(得分:0)

<强>步骤

  1. 您需要2个阵列。一个有所有时代的&#39; ON&#39;一个人全都&#39; OFF&#39;次。
  2. 绕过&#39; ON&#39;之一。
  3. 检查&#39; OFF&#39;的索引是否有值。阵列。
  4. 如果是,请计算时间并添加。
  5. 如果不是,请获取当前时间并进行计算并添加。
  6. 完成:D