我正在使用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
。
答案 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'));