60

私はしばらくの間 moment.js を使用しており、日付操作がはるかに簡単になりましたが、失敗する特定のケースがあり、その理由がわかりません。

今日 (2013 年 10 月 31 日) と 2014 年 2 月 1 日の差を計算すると、2 つの日付の間に 3 か月と 1 日あるにもかかわらず、月の差は 2 として返されます。

10 月 31 日から 1 月 31 日までの差分は正常に機能します: 3 か月と 0 日です。

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

コンソールには次のログが記録されます。

periodStartDate: Thu Oct 31 2013 11:13:51 GMT+0000 (GMT)
someDate: Sat Feb 01 2014 11:13:51 GMT+0000 (GMT)
monthsDiff: 2

丸めないブール値として true を渡すと、月の差分は次のようになります。

monthsDiff: 2.983050847457627 

これは Moment.js.diff() の単なるバグですか? 私の他のテストケースはすべて成功しました。

4

4 に答える 4

12

瞬間ライブラリを使用している場合、2 か月間の正しい値の差を持つシンプルで簡単なソリューション

  const monthDifference =  moment(new Date(endDate)).diff(new Date(startDate), 'months', true);

endDateに日数を加算したい場合

 const monthDifference = moment(new Date(endDate.add(1, 'days'))).diff(new Date(startDate), 'months', true);
于 2018-11-28T09:59:27.487 に答える