Php 计算日期时间集之间的总时间
我甚至不知道如何恰当地表达这个问题,但我正试图计算一台设备开机的总时间。我有一个mysql数据库,记录设备打开或关闭的时间 我的数据库的外观示例如下: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
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)如果计数(关)>计数(开):检查数据是否存在差距
开
和关
步骤2:比较数组的长度
- 2a)如果相等:设备当前处于关闭状态,您可以只计算各个开关周期的总和(例如(datetimeOff[0]-datetimeOn[0])+(datetimeOff[1]-datetimeOn[1])+(…),括号仅用于可读性)
- 2b)如果count(on)=count(OFFs)+1:设备当前处于打开状态,则可以将当前日期时间添加到off数组中,并使用与2a相同的过程
- 2c)如果计数(ON)>计数(OFF)+1:检查数据是否存在差距
- 2d)如果计数(关)>计数(开):检查数据是否存在差距
对于每个“开”的时间也是“关”的时间吗?是的,它总是交替出现,每个“开”后面都会跟着“关”。那么,为什么不创建一个包含所有“开”和所有“关”时间的数组呢。然后循环计算它们之间的差异……如果“开”和“关”的记录数不一样呢?例如,如果一台设备仍然处于“开启”状态,那么不会有“关闭”记录吗?另外,我是一个初学者,我甚至不知道如何开始这个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");