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

Mou*_*Mou -1 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);
Run Code Online (Sandbox Code Playgroud)

但是当我对时间差异采用相同的方法时,就会失败。

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

我需要时间的不同。我在哪里犯了错误?请让我知道。谢谢

Mag*_*int 5

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

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

我想,您很可能会遇到这样一种情况:第一次调用 moment.utc 在与第二次调用不同的 UTC 日进行评估,并导致计算不准确。出于这个原因,您可能想要指定一个日期而不是仅仅解析时间。

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