[解決済み】日付に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);
関連
-
[解決済み】JavaScriptで':'(コロン)は何をするのか?
-
[解決済み】「Uncaught TypeError: Chromeで "Illegal invocation "が発生する。
-
[解決済み】module.exports "モジュールが定義されていません"
-
[解決済み】JavaScriptで「無効な日付」のDateインスタンスを検出する
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptの日付の書式設定方法
-
[解決済み] JavaScriptで配列の先頭に新しい配列要素を追加するにはどうすればよいですか?
-
[解決済み] JavaScriptで日付の書式設定に関するドキュメントはどこにありますか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】SecurityError: オリジンを持つフレームがクロスオリジンフレームにアクセスするのをブロックした
-
[解決済み】jquery $.ajaxオブジェクトのresponseJSONプロパティを取得する方法 [重複]。
-
[解決済み】NodeJS "ESモジュールをロードするためにインポートを使用する必要があります。"
-
[解決済み】Javascriptのコールバック関数がFirefoxで「Callback is not a function」というエラーを投げる
-
[解決済み】getElementByIdはnullを返す?[クローズド]
-
[解決済み】Jestが予期しないトークンに遭遇した
-
[解決済み】ES6マップオブジェクトをソートすることは可能ですか?
-
[解決済み】 Uncaught Reference Error: stLight is not defined (in Chrome only)
-
[解決済み】ETIMEDOUTエラーの対処方法は?
-
[解決済み】JavaScriptで日付に月を追加する方法は?[重複している]をクリックします。