1. ホーム
  2. javascript

[解決済み] JavaScriptで今日から3ヶ月前の日付を計算するには?

2022-04-19 05:53:17

質問

現在の日付から3ヶ月前の日付を入力しようとしています。以下のコードで現在の月を取得します。

var currentDate = new Date();
var currentMonth = currentDate.getMonth()+1;

日付(のオブジェクト)を計算し、フォームを作成するロジックを教えてください。 Date 月が1月(1)の場合、3ヶ月前の日付はOCtober(10)になることを考慮したデータ型)ですか?

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

var d = new Date();
d.setMonth(d.getMonth() - 3);

これは1月でも有効です。 このスニペットを実行してください。

var d = new Date("January 14, 2012");
console.log(d.toLocaleDateString());
d.setMonth(d.getMonth() - 3);
console.log(d.toLocaleDateString());


注意点があります・・・。

1ヶ月というのは不思議なものですね。 1ヶ月をどう定義するのか? 30日ですか? ほとんどの人は、1ヶ月前とは前月の同じ日のことだと言うでしょう 要引用 . しかし、半分以上は30日前ではなく、31日前なのです。 また、今日がその月の31日(8月や12月でない場合)、その日は前月には存在しないのです。

興味深いことに、GoogleはJavaScriptに尋ねると同意します。 ある月の前の日は何日ですか :

また、次のように書かれています。 1ヶ月は30.4167日 :

では、3月31日の1ヶ月前と、3日前の3月28日の1ヶ月前とは同じ日なのでしょうか? これはすべて、"1ヶ月前"の意味によるものです。 プロダクトオーナーと会話してください。

momentjsのように、月の最終日に移動することでこれらの最終日エラーを修正したい場合は、次のようにします。

const d = new Date("March 31, 2019");
console.log(d.toLocaleDateString());
const month = d.getMonth();
d.setMonth(d.getMonth() - 1);
while (d.getMonth() === month) {
    d.setDate(d.getDate() - 1);
}
console.log(d.toLocaleDateString());

もし、あなたの要求がもっと複雑なら、数学を使ってコードを書いてください。 あなたは開発者です! ライブラリをインストールする必要はありません! stackoverflowからコピー&ペーストする必要はありません! あなたが必要とすることを正確に行うために、自分でコードを開発することができます!