MomentJS:以分钟为单位检测时差

时间:2016-04-09 19:46:13

标签: javascript momentjs

我试过这个但没有得到预期的结果。

首先我将以下方式区分开来并且它可以正常工作

var inputDate = moment('02/10/2016', 'MM-DD-YYYY');
var birthday = moment('02/05/2016', 'MM-DD-YYYY');
var diff = inputDate.diff(birthday, 'days'); 
alert(diff);

但是当我按照相同的方法进行时间差异时,则会失败。

var beginningTime = moment('08:45:21');
var endTime = moment('07:00:01');
var difftm= beginningTime.diff(endTime, 'mm'); 
alert(difftm);

我需要时间的差异。我犯了哪个错误?请告诉我。感谢

2 个答案:

答案 0 :(得分:2)

只要告诉解析器您正在查找的内容,Moment就可以处理没有日期的时间。 当您解析没有日期的时间时,请记住,您所做的任何差异计算可能不会考虑DST转换,因此可能是错误的。 当您处理没有日期的时间时,我建议您使用UTC模式,这样您就不会意外地最终对DST转换进行计算,最终会出错。因此,您的代码可以编写如下:

console.log(moment.utc('08:45:21', 'HH:mm:ss')
  .diff(moment.utc('07:00:01', 'HH:mm:ss'), 'minutes'));
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>

我认为,您可能会遇到这样的情况:第一次调用moment.utc的时间与第二次调用不同,并导致计算不准确。因此,您可能希望指定日期而不是仅解析时间。

在任何一种情况下,使用UTC模式以避免任何可能的DST并发症。

答案 1 :(得分:1)

只需使用minutes代替days

var beginningTime = moment('1900-01-01 08:45:21');
var endTime = moment('1900-01-01 07:00:01');
var difftm= beginningTime.diff(endTime, 'minutes'); 
alert(difftm);

演示:https://jsfiddle.net/447sxg27/1/

正如他在回答中提到的那样,你的日期必须是有效日期(日期+时间)。