【问题标题】:How to add times together with Momentjs如何与 Momentjs 一起添加时间
【发布时间】:2017-04-12 15:20:47
【问题描述】:

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

【问题讨论】:

    标签: javascript jquery ajax momentjs


    【解决方案1】:

    只需计算循环内所有持续时间的总和,并在循环外打印结果。

    从 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>');
    

    【讨论】:

    • 啊哈!完美的。非常感谢 Vincenzo,我没想到要添加 (moment.duration(0)),现在很有意义 :) 谢谢!
    【解决方案2】:

    https://momentjs.com/docs/#/manipulating/add/

    由于您已经设置了持续时间,您可以使用添加持续时间来组合时间,如下所示:

    var duration = moment.duration({'days' : 1});
    moment([2012, 0, 31]).add(duration); // February 1
    

    【讨论】:

    • 我怎样才能像我一样在循环中做到这一点?
    • 感谢您的帮助!它让我离我想要的更近了一步。我很感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 2019-02-23
    • 1970-01-01
    相关资源
    最近更新 更多