如何与Momentjs一起添加时间

时间:2017-04-12 15:20:47

标签: javascript jquery ajax momentjs

我有一个应用程序,可以在设备开启和关闭时记录。它将详细信息记录在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

2 个答案:

答案 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>');