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

使用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 

为什么我有一个小时的差距? 秒和分钟似乎运作良好。

做完这些之后,我尝试了以下内容:

 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

你在这里遇到的问题是,当在构造函数中joinnextTime.diff()时,你有效地将毫秒数传递给了moment() ,并试图把它解释为一个时间戳,这就是为什么你没有得到期望的结果。

除了获得时间和手动重build你正在寻找的东西外,没有什么“好办法”来获得你想要的结果:

 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之间秒数的小数值,这不是你想要的。