我有一个应用程序,可以在设备开启和关闭时记录。它将详细信息记录在mysql数据库中。我想计算设备的使用时间。我使用jquery / ajax来获取两组数据:ON和OFF,在两个数组中。
数据库结构:
device id logtime status
---------------------------------------------------
17x1p14e6662 April 12th 2017, 1:05:52 pm ON
17x1p14e6662 April 12th 2017, 1:06:34 pm OFF
.... etc
然后我循环遍历它们来计算时差。这很好用。然后,我如何将所有结果时间输出添加到一个时间?
这是jquery / ajax的一部分:
我的php后端的响应是:
{"result":{"trueresults":[["April 12th 2017, 1:05:52 pm"],["April 12th 2017, 1:05:54 pm"],["April 12th 2017, 1:06:54 pm"],["April 12th 2017, 4:54:10 pm"]],"falseresults":[["April 12th 2017, 1:05:53 pm"],["April 12th 2017, 1:05:55 pm"],["April 12th 2017, 1:07:02 pm"],["April 12th 2017, 4:56:18 pm"]]},"errors":false}
实际的jQuery代码:
.success(function(response) {
if(!response.errors && response.result) {
var trueresultgroup = response.result.trueresults;
var falseresultgroup = response.result.falseresults;
for (i = 0; i < trueresultgroup.length; i++) {
var on = (trueresultgroup[i]).toString();
var off = (falseresultgroup[i]).toString();
var ms = moment(off,"MMMM Do YYYY, h:mm:ss a").diff(moment(on,"MMMM Do YYYY, h:mm:ss a"));
var d = moment.duration(ms);
var s = d.format("hh [hours] :mm [minutes] :ss [seconds]");
$("#divtimes").append('<p>'+s+'</p>');
}
} else {
alert("error");
}
});
因此我的html中的输出如下所示:
<div id="divtimes" class="m-b-30"><p>01 seconds</p><p>01 seconds</p><p>08 seconds</p><p>02 minutes :08 seconds</p></div>
我想要的输出应该是所有这些的总和:
02 minutes :18 seconds
答案 0 :(得分:0)
https://momentjs.com/docs/#/manipulating/add/
由于您已经设置了持续时间,因此您可以使用添加持续时间来组合时间,如下所示:
var duration = moment.duration({'days' : 1});
moment([2012, 0, 31]).add(duration); // February 1
答案 1 :(得分:0)
只需计算循环内所有持续时间的总和,然后在循环外打印结果。
以0毫秒(moment.duration(0)
)的持续时间开始,然后使用add
添加计算的差异。在循环外打印结果。
您的代码可能如下所示:
// Create a duration of 0 ms
var tot = moment.duration(0);
for (i = 0; i < trueresultgroup.length; i++) {
var on = (trueresultgroup[i]).toString();
var off = (falseresultgroup[i]).toString();
var ms = moment(off,"MMMM Do YYYY, h:mm:ss a").diff(moment(on,"MMMM Do YYYY, h:mm:ss a"));
tot.add(ms, 'ms');
}
var s = tot.format("hh [hours] :mm [minutes] :ss [seconds]");
$("#divtimes").append('<p>'+s+'</p>');