Node.js 两个时间戳之间的小时差错误(hh:mm:ss)

Node.js 两个时间戳之间的小时差错误(hh:mm:ss),node.js,momentjs,Node.js,Momentjs,使用moment.js,我想得到两个时间戳之间的时间差 执行以下操作: var prevTime = moment('23:01:53', "HH:mm:SS"); var nextTime = moment('23:01:56', "HH:mm:SS"); var duration = moment(nextTime.diff(prevTime)).format("HH:mm:SS"); 我得到这个结果: 01:00:03 为什么我有1小时的差异?几秒钟和几分钟似乎很有效 完成后,我尝试

使用moment.js,我想得到两个时间戳之间的时间差

执行以下操作:

var prevTime = moment('23:01:53', "HH:mm:SS");
var nextTime = moment('23:01:56', "HH:mm:SS");

var duration = moment(nextTime.diff(prevTime)).format("HH:mm:SS");
我得到这个结果:

01:00:03
为什么我有1小时的差异?几秒钟和几分钟似乎很有效

完成后,我尝试了以下方法:

function time_diff(t1, t2) {
    var parts = t1.split(':');
    var d1 = new Date(0, 0, 0, parts[0], parts[1], parts[2]);
    parts = t2.split(':');
    var d2 = new Date(new Date(0, 0, 0, parts[0], parts[1], parts[2]) - d1);
    return (d2.getHours() + ':' + d2.getMinutes() + ':' + d2.getSeconds());
}

var diff = time_diff('23:01:53','23:01:56');

输出是:
1:0:3

这里的问题是,当将
nextTime.diff()
放在矩构造函数中时,实际上是将毫秒输入到
moment()
中,它试图将其解释为时间戳,这就是为什么无法获得预期结果的原因

除了获得时间和手动重建您正在寻找的内容之外,没有“好方法”可以获得您想要的结果:

var dur = moment.duration(nextTime.diff(prevTime)); 
var formattedDuration = dur.get("hours") +":"+ dur.get("minutes") +":"+ dur.get("seconds");
还有一个更优雅的版本,可以在输出中实现零填充:

var difference = nextTime.diff(prevTime);
var dur = moment.duration(difference);
var zeroPaddedDuration = Math.floor(dur.asHours()) + moment.utc(difference).format(":mm:ss");
应该会让你更快乐


编辑:我注意到您在格式中使用了
HH:mm:SS
,但是您应该使用
HH:mm:SS
SS'将为您提供0到999之间秒的分数值,这不是您想要的。

当我按照您的代码进行操作时,输出如下:
0:0:0
。小时和分钟是正确的,但是秒不是都给我相同的结果,秒差是错误的,现在是正确的!!更糟糕的是,我读了文件,只是抄错了行!非常感谢,我现在得到了预期的结果没问题,我花了一段时间才注意到:)这可能是由于GMT偏移:您可以尝试UTC。只是一个提示:是的,我看错了文件。更正了,谢谢!