Moment.js diff between UTC dates

2019-01-18 21:21发布

问题:

I'm using moments.js for working with dates in javascript. All dates are in UTC (or should be).

I have the following date (60 minutes from current time):

//Wed, 04 Apr 2012 21:09:16 GMT
to   = moment.utc().add('m', 60).toDate();

Now I want to get the difference in seconds between this date and the current UTC datetime, so I do:

seconds = moment.utc().diff(to, 'seconds');

This returns 10800 instead of 3600, so 3 hours, instead of one.

Any ideas what I'm doing wrong?

Thank you!

EDIT:

I updated the line to seconds = moment().diff(to, 'seconds'); and it gets the currect seconds, but it's -3600 instead of positive.

EDIT:

I now have these two moment objects:

{ _d: Thu, 05 Apr 2012 17:33:18 GMT, _isUTC: true }
{ _d: Thu, 05 Apr 2012 16:38:45 GMT, _isUTC: true }

d1 and d2.

When I do d1.diff(d2, 'hours', true); this returns 4. It's definitely something to do with UTC I think, but it seems this should work.

回答1:

This is a legitimate bug. I just filed it here: https://github.com/timrwood/moment/issues/261

To get around it, use the following instead.

var a = moment.utc().add('m', 60).toDate(),
    b = moment().diff(to, 'seconds'); // use moment() instead of moment.utc()

Also, if you need to get the toString of the date, you can use moment().toString() as it proxies to the wrapped Date().toString()



回答2:

Might be time zones kicking in because you are using toDate(). Try to just work directly with moment (i.e. change it to to = moment.utc().add('m', 60);).