两个时间戳之间错误的时差(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之间秒数的小数值,这不是你想要的。