使用moment.js,我想获得2个时间戳之间的时差。
执行以下操作,
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
答案 0 :(得分:0)
你在这里遇到的问题是,当把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之间的秒数的小数值,这不是你想要的。