1. ホーム
  2. ジャバスクリプト

[解決済み】日付にX月を追加するJavaScript関数

2022-04-05 18:03:26

質問

JavaScriptの日付にXヶ月を追加する最も簡単できれいな方法を探しています。

むしろ 年の繰り越しを処理する をしなければならないか 自作の関数を書く .

これを実現するために、何か内蔵されているものはないでしょうか?

解決方法は?

次の関数は、JavaScript で日付に月を追加するものです ( ソース ). 年のロールオーバーや月の長さが異なることを考慮しています。

function addMonths(date, months) {
    var d = date.getDate();
    date.setMonth(date.getMonth() + +months);
    if (date.getDate() != d) {
      date.setDate(0);
    }
    return date;
}

// Add 12 months to 29 Feb 2016 -> 28 Feb 2017
console.log(addMonths(new Date(2016,1,29),12).toString());

// Subtract 1 month from 1 Jan 2017 -> 1 Dec 2016
console.log(addMonths(new Date(2017,0,1),-1).toString());

// Subtract 2 months from 31 Jan 2017 -> 30 Nov 2016
console.log(addMonths(new Date(2017,0,31),-2).toString());

// Add 2 months to 31 Dec 2016 -> 28 Feb 2017
console.log(addMonths(new Date(2016,11,31),2).toString());

上記の解決策は、移動先の月よりも日数の多い月から移動する場合のエッジケースをカバーしています。

  • 2020年2月29日に12ヶ月を追加(本来は2021年2月28日)
  • 2020年8月31日に1ヶ月追加(2020年9月30日にする必要あり)

適用時に月日が変更になった場合 setMonth の場合、月の長さが異なるため、翌月にオーバーフローしたことが分かります。この場合 setDate(0) で前月の最終日に戻ります。

注:このバージョンの回答は、異なる月の長さを優雅に扱わなかった以前のバージョン(以下)を置き換えるものです。

var x = 12; //or whatever offset
var CurrentDate = new Date();
console.log("Current date:", CurrentDate);
CurrentDate.setMonth(CurrentDate.getMonth() + x);
console.log("Date after " + x + " months:", CurrentDate);