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

Php 计算日期时间集之间的总时间,php,jquery,mysql,momentjs,Php,Jquery,Mysql,Momentjs,我甚至不知道如何恰当地表达这个问题,但我正试图计算一台设备开机的总时间。我有一个mysql数据库,记录设备打开或关闭的时间 我的数据库的外观示例如下: device id logtime status --------------------------------------------------- 17x1p14e6662 April 12th 2017, 1:05:52 pm ON 17x1p14e6662 April 12th 2

我甚至不知道如何恰当地表达这个问题,但我正试图计算一台设备开机的总时间。我有一个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计算两个时间段之间的差异,类似于以下内容(参考):


如果我检索一台设备的所有记录,我怎么能只计算每个“开”和“关”之间的总时间呢?

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

步骤1:将数组除以

步骤2:比较数组的长度

  • 2a)如果相等:设备当前处于关闭状态,您可以只计算各个开关周期的总和(例如(datetimeOff[0]-datetimeOn[0])+(datetimeOff[1]-datetimeOn[1])+(…),括号仅用于可读性)
  • 2b)如果count(on)=count(OFFs)+1:设备当前处于打开状态,则可以将当前日期时间添加到off数组中,并使用与2a相同的过程
  • 2c)如果计数(ON)>计数(OFF)+1:检查数据是否存在差距
  • 2d)如果计数(关)>计数(开):检查数据是否存在差距

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

步骤1:将数组除以

步骤2:比较数组的长度

  • 2a)如果相等:设备当前处于关闭状态,您可以只计算各个开关周期的总和(例如(datetimeOff[0]-datetimeOn[0])+(datetimeOff[1]-datetimeOn[1])+(…),括号仅用于可读性)
  • 2b)如果count(on)=count(OFFs)+1:设备当前处于打开状态,则可以将当前日期时间添加到off数组中,并使用与2a相同的过程
  • 2c)如果计数(ON)>计数(OFF)+1:检查数据是否存在差距
  • 2d)如果计数(关)>计数(开):检查数据是否存在差距
步骤

  • 您需要2个阵列。一个是所有时间“开”的,另一个是所有时间“关”的
  • 在“开”一号上循环
  • 检查“OFF”数组的索引上是否有值
  • 如果是,计算时间并将其相加
  • 如果否,则获取当前时间并进行计算和添加
  • 完成:D
  • 步骤

  • 您需要2个阵列。一个是所有时间“开”的,另一个是所有时间“关”的
  • 在“开”一号上循环
  • 检查“OFF”数组的索引上是否有值
  • 如果是,计算时间并将其相加
  • 如果否,则获取当前时间并进行计算和添加
  • 完成:D

  • 对于每个“开”的时间也是“关”的时间吗?是的,它总是交替出现,每个“开”后面都会跟着“关”。那么,为什么不创建一个包含所有“开”和所有“关”时间的数组呢。然后循环计算它们之间的差异……如果“开”和“关”的记录数不一样呢?例如,如果一台设备仍然处于“开启”状态,那么不会有“关闭”记录吗?另外,我是一个初学者,我甚至不知道如何开始这个lol。这就是我在第一个问题中要问的…:)所以数字不一样。。。问题是那时你想做什么。你可以计算到现在的时间,也可以停止计算。这是你的选择:)对于每个“开”的时间也是一个“关”的时间吗?是的,它总是交替出现,每个“开”后面都会跟着“关”。所以为什么不制作一个包含所有“开”和所有“关”时间的数组呢。然后循环计算它们之间的差异……如果“开”和“关”的记录数不一样呢?例如,如果一台设备仍然处于“开启”状态,那么不会有“关闭”记录吗?另外,我是一个初学者,我甚至不知道如何开始这个lol。这就是我在第一个问题中要问的…:)所以数字不一样。。。问题是那时你想做什么。你可以计算到现在的时间,也可以停止计算。这是你的选择:)谢谢,这应该足够让我弄明白了。谢谢你的帮助。没问题,如果你有任何问题,尽管问:)谢谢,这应该足以让我弄明白。谢谢你的帮助。没问题,如果你有任何问题尽管问:)非常感谢ccKep。我会使用你建议的工作流程,它给了我足够的依据:)非常感谢。非常感谢ccKep。我将使用你建议的工作流程,它给我足够的依据:)非常感谢。
    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");