I've been using moment.js for a short while now, and it's made date manipulation a lot easier but I have a specific case that is failing, and I can't see why.
When calculating the diff between today (31st October 2013) and the 1st February 2014, the months diff comes back as 2, although there are 3 complete months and one day between the two dates.
Diff between 31st October and 31st January works fine: 3 months and zero days.
var mStartDate = moment([ periodStartDate.getFullYear(), periodStartDate.getMonth(), periodStartDate.getDate() ]);
var mTermDate = moment([ someDate.getFullYear(), someDate.getMonth(), someDate.getDate() ]);
console.log('periodStartDate: ' + periodStartDate);
console.log('someDate: ' + someDate);
// Years
var yearsDiff = mTermDate.diff(mStartDate, 'years');
// Months
var monthsDiff = mTermDate.diff(mStartDate, 'months', true);
The console logs the following:
periodStartDate: Thu Oct 31 2013 11:13:51 GMT+0000 (GMT)
someDate: Sat Feb 01 2014 11:13:51 GMT+0000 (GMT)
monthsDiff: 2
If I pass true as the boolean not to round, the months diff is
monthsDiff: 2.983050847457627
Is this just a bug in Moment.js.diff()? Every single one of my other test cases pass successfully.
I went a different route trying to get the difference between two months
This made sense to me and since moment is doing some strange things with diff I just decided to make it clear what my result will be.
I think this has to do with the 'special handling' as described in The Fine Manual:
Moment.js applies this special handling when dealing with
31 Jan
and31 Oct
(having the same day):So the
2.98
value is correct, it's just that the second example turns the result into a 'calender months' difference.(as for rounding down to 2, that's also documented on the same page)
Simple And Easy Solution with correct value difference between two months if you are using moment Library
If you want to add the number of days in endDate