Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Moment.js diff between UTC dates

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.

like image 762
dzm Avatar asked Apr 04 '12 20:04

dzm


People also ask

How do you find the moment difference in dates?

diff(Moment|String|Number|Date|Array, String); moment(). diff(Moment|String|Number|Date|Array, String, Boolean); To get the difference in milliseconds, use moment#diff like you would use moment#from . To get the difference in another unit of measurement, pass that measurement as the second argument.

Is MomentJS dead?

We now generally consider Moment to be a legacy project in maintenance mode. It is not dead, but it is indeed done.

Is MomentJS deprecated?

Moment construction falls back to js Date. This is discouraged and will be removed in an upcoming major release. This deprecation warning is thrown when no known format is found for a date passed into the string constructor.

What is moment UTC?

moment. utc can take params as number, string, moment, date etc. This method can be used when the date displayed has to be in UTC format.


1 Answers

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

like image 128
timrwood Avatar answered Oct 03 '22 20:10

timrwood