Reputation: 23544
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.
Upvotes: 16
Views: 28181
Reputation: 10671
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()
Upvotes: 17
Reputation: 19022
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);
).
Upvotes: 0