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.
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()
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);
).