我正试图在现在和未来的时间之间获得持续时间:
var d = moment.utc('27.03.2018 - 15:43:01', 'DD.MM.YYYY - HH:mm:ss')
var v = moment.utc(moment.duration(d).asMilliseconds()).format("HH:mm:ss")
console.log(v);
问题是v总是00:00:00,为什么?
d是有效的时刻对象。
答案 0 :(得分:1)
调用duration(param)
时,参数必须是文档中描述的值之一:https://momentjs.com/docs/#/durations/creating/
例如:如果您将其称为moment.duration(100)
,则会创建100毫秒的持续时间。持续时间表示经过时间的跨度,或“时间量”。
如果您将日期对象传递给它(moment.duration(d)
),这没有意义。您正尝试从日期值创建持续时间(经过时间的跨度)。这是对两个概念的误解:
您可以执行以下操作:
但是从日期创建一个持续时间,而没有另一个日期作为参考,没有意义。在这种特定情况下,时刻刚刚决定返回值等于零的持续时间:打印moment.duration(d)
的值,您将看到P0T
- 这是零持续时间的ISO 8601表示: https://en.wikipedia.org/wiki/ISO_8601#Durations
然后调用.asMilliseconds()
,它返回持续时间所代表的总毫秒数。在这种情况下,它返回零。
然后你调用moment.utc()
将上面的结果作为参数传递。换句话说,你和moment.utc(0)
做的一样。将数字传递给utc()
时,它会将此数字解释为“自Unix纪元以来的毫秒数”:https://momentjs.com/docs/#/parsing/utc/
当你传递零时,结果是Unix纪元本身,即1970年1月1日午夜。
然后拨打.format("HH:mm:ss")
打印小时,分钟和秒。由于moment.utc(0)
是午夜,结果为00:00:00
。
如果您想计算2个日期之间的差异,请使用Pavlo的答案所解释的diff
方法。
答案 1 :(得分:0)
var d = moment.utc('27.03.2018 - 15:43:01', 'DD.MM.YYYY - HH:mm:ss');
var v = d.diff(moment.utc(), 'milliseconds');
console.log(v);
您想使用diff
,因为它会计算两个date
对象之间的差异。第二个参数是您想要返回的时间单位。