1. ホーム
  2. javascript

moment.jsで現在の日付に今から1ヶ月を正しく追加する方法

2023-08-02 22:49:26

質問

moment.jsのドキュメントを読むと、現在の日付の時間から1ヶ月を追加したい場合は、次のコードを使用するとのことです。

var moment = require('moment');
var futureMonth = moment().add(1, 'M').format('DD-MM-YYYY');

しかし、今の問題は、それが適切に日付を追加していない、例えば 現在の日付は2015年10月31日であると言う、コードで説明します。

var currentDate = moment().format('DD-MM-YYYY');
var futureMonth = moment().add(1, 'M').format('DD-MM-YYYY');

console.log(currentDate) //  Will result --> 31/10/2015
console.log(futureMonth) //  Will result --> 30/11/2015 

現在の暦の時間を見てみると、1ヶ月後に 31/10/2015 であるはずの 1/12/2015

この問題を解決する方法について、どなたか私に意見を聞かせていただけないでしょうか。

ありがとうございます。

どのように解決するのですか?

var currentDate = moment('2015-10-30');
var futureMonth = moment(currentDate).add(1, 'M');
var futureMonthEnd = moment(futureMonth).endOf('month');

if(currentDate.date() != futureMonth.date() && futureMonth.isSame(futureMonthEnd.format('YYYY-MM-DD'))) {
    futureMonth = futureMonth.add(1, 'd');
}

console.log(currentDate);
console.log(futureMonth);

デモ

EDIT

moment.addRealMonth = function addRealMonth(d) {
  var fm = moment(d).add(1, 'M');
  var fmEnd = moment(fm).endOf('month');
  return d.date() != fm.date() && fm.isSame(fmEnd.format('YYYY-MM-DD')) ? fm.add(1, 'd') : fm;  
}

var nextMonth = moment.addRealMonth(moment());

デモ