Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
306 views
Welcome To Ask or Share your Answers For Others

1 Answer

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...