2012-04-04 162 views
15

我使用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我认为,但似乎应该工作。

回答

0

由于您使用的是toDate(),因此可能会踢入时区。尝试直接与时刻一起工作(即将其更改为to = moment.utc().add('m', 60);)。

+0

嗯,那“到”真的是来自数据库的一个值,即是使用上面的代码创建的,所以我必须使用toDate()来存储字符串。 – dzm 2012-04-04 21:30:13

+0

@Super我编辑了帖子。使用时间为UTC的对象,得到类似的问题。 – dzm 2012-04-05 16:42:29

16

这是一个合法的错误。我只是在这里提交它: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()

+7

仅供参考,在版本1.6.0中修复。 – timrwood 2012-05-02 19:52:25

+0

处理夏令时时,问题仍然存在。示例:2017年10月15日至2017年10月22日(UTC)之间的天数差异。第一次约会不在巴西夏令时,但第二次是。你上面建议的修复方法确实有效。 – Joaobrunoah 2017-10-17 12:56:08