计算午夜后两次的持续时间

时间:2017-03-14 11:04:34

标签: javascript momentjs

如何计算两次之间的持续时间?

var start = moment('17:00', "HH:mm");
var end = moment('02:15', "HH:mm");
moment.duration(end.diff(start)).asHours()
//outputs  -14.75 instead of 9.15

3 个答案:

答案 0 :(得分:5)

时刻构造函数默认为当前年,月和日,因此您的问题是endstart之前。您可以使用isBefore比较您的变量,然后使用add来预测" trasform" end到第二天。

请注意asHours给出小数值(因此您将有9.25而不是9.15)。如果你需要9小时15分钟"您可以使用moment-duration-format插件(例如,您在template方法中使用'h[.]m'作为format

这是一份工作样本:



var start = moment('17:00', "HH:mm");
var end = moment('02:15', "HH:mm");
if( end.isBefore(start) ){
  end.add(1, 'day');
}
var dur = moment.duration(end.diff(start))
var result = dur.asHours();
document.writeln(result);
document.write(dur.format('h[.]m'));

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

这是在一天内计算差异的最简单方法:

var start = moment('17:00', "HH:mm");
var end = moment('02:15', "HH:mm");
var duration = moment.duration(end.diff(start)).asHours();
if (duration < 0) duration += 24;

答案 2 :(得分:0)

我认为问题在于你有2个时刻对象,一个代表今天17:00,一个代表今天02:15。虽然你想今天17:00和明天02:15。只需使用moment('02:15', "HH:mm").add(1, 'days')即可获得第二天。

var start = moment('17:00', "HH:mm");
var end = moment('02:15', "HH:mm").add(1, "days");
var result = moment.duration(end.diff(start)).asHours();
document.write(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>