Moment.js diff between UTC dates

date, javascript, momentjs, node.js

Solution

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

Problem

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.

Original source