moment.js diff显示错误的结果

时间:2017-04-07 17:05:59

标签: javascript momentjs

我正在使用momentjs制作一个小脚本,它会显示我在特定时间之前有多少小时和分钟(单独)。但由于某种原因,结果是错误的。

到目前为止我的代码:

var TimeA = moment('08:00:00', 'HH:mm:ss');
var TimeB = moment('16:00:00', 'HH:mm:ss');

var DiffAB = moment(TimeA.diff(TimeB)).format('HH:mm:ss');

var DiffHours = moment(DiffAB, 'HH:mm:ss').format('H');
var DiffMinutes = moment(DiffAB, 'HH:mm:ss').format('mm');

console.log('TimeA: ' + moment(TimeA).format('HH:mm:ss'));
console.log('TimeB: ' + moment(TimeB).format('HH:mm:ss'));

console.log('Difference A-B: ' + DiffAB);

console.log('Diff Hours: ' + DiffHours);
console.log('Diff Minutes: ' + DiffMinutes);  

那就是输出:

TimeA: 08:00:00
TimeB: 16:00:00
Difference A-B: 17:00:00
Diff Hours: 17
Diff Minutes: 00  

A - B的差异应为8,但其显示为17

3 个答案:

答案 0 :(得分:0)

根据momentjs文档

  

如果时刻早于您传递给moment.fn.diff的那一刻,则返回值将为负数。

将其翻译为您的示例:

  

如果TimeA早于TimeB传递给moment.diff,那么该值将为负

并且因为它以毫秒-28800000返回是一条指令,如下:从午夜开始计算毫秒数,这会给你不同的时间

所以你应该做的是

var DiffAB = moment(TimeB.diff(TimeA)).utcOffset(0).format('HH:mm:ss');

差异文档https://momentjs.com/docs/#/displaying/difference/

doc

中的示例
  

想到这一点的简单方法是替换.diff(使用减号运算符。

          // a < b
a.diff(b) // a - b < 0
b.diff(a) // b - a > 0

答案 1 :(得分:-1)

正如大家所说,diff返回毫秒,因此您应该将其转换为小时(或所需的格式)。

moment.duration(TimeA.diff(TimeB), 'milliseconds').asHours();

答案 2 :(得分:-1)

试试这个

var TimeA = moment('08:00:00', 'HH:mm:ss');
var TimeB = moment('16:00:00', 'HH:mm:ss'); 
var DiffAB = moment.utc(moment(TimeB).diff(moment(TimeA)));
console.log('Difference B-A: ' + DiffAB.format('HH:mm:ss'));
console.log('Diff Hours: ' + DiffAB.format('H'));
console.log('Diff Minutes: ' + DiffAB.format('s'));