Moment.js在UTC日期差异
我使用moments.js在javascript中处理日期。所有日期都是UTC(或应该是)。Moment.js在UTC日期差异
我有以下日期(从当前时间60分钟):
//Wed, 04 Apr 2012 21:09:16 GMT
to = moment.utc().add('m', 60).toDate();
现在,我想在此日期和当前UTC日期时间秒之间的区别,所以我做的:
seconds = moment.utc().diff(to, 'seconds');
这将返回10800
而不是3600
,所以3小时,而不是一个。
任何想法我做错了什么?
谢谢!
编辑:
我行更新到seconds = moment().diff(to, 'seconds');
它得到确认当期秒,但它是-3600
,而不是积极的。
编辑:
我现在有这两个时刻对象:
{ _d: Thu, 05 Apr 2012 17:33:18 GMT, _isUTC: true }
{ _d: Thu, 05 Apr 2012 16:38:45 GMT, _isUTC: true }
D1和D2。
当我做d1.diff(d2, 'hours', true);
这将返回4
。这绝对是与UTC我认为,但似乎应该工作。
由于您使用的是toDate()
,因此可能会踢入时区。尝试直接与时刻一起工作(即将其更改为to = moment.utc().add('m', 60);
)。
这是一个合法的错误。我只是在这里提交它:https://github.com/timrwood/moment/issues/261
要解决它,请使用下面的代替。
var a = moment.utc().add('m', 60).toDate(),
b = moment().diff(to, 'seconds'); // use moment() instead of moment.utc()
另外,如果你需要获得最新的toString
,你可以使用moment().toString()
为其所代理的包裹Date().toString()
仅供参考,在版本1.6.0中修复。 – timrwood 2012-05-02 19:52:25
处理夏令时时,问题仍然存在。示例:2017年10月15日至2017年10月22日(UTC)之间的天数差异。第一次约会不在巴西夏令时,但第二次是。你上面建议的修复方法确实有效。 – Joaobrunoah 2017-10-17 12:56:08
嗯,那“到”真的是来自数据库的一个值,即是使用上面的代码创建的,所以我必须使用toDate()来存储字符串。 – dzm 2012-04-04 21:30:13
@Super我编辑了帖子。使用时间为UTC的对象,得到类似的问题。 – dzm 2012-04-05 16:42:29