やりたいこと
JavaScriptの日付を扱うDateオブジェクトを使用して、その月の始め(1日)と終わり(30日,31日等)を算出する方法をご紹介します。
例えば、入力した日付が2021年1月であるかを計算する場合に、2021/01/01から2021/01/31の間でIF分の条件を書く必要があります。
その場合に2021/01/01と、2021/01/31を算出する必要があります。
JavaScriptのDateオブジェクトは動きが少し難しいので初心者の方は頭を悩ませると思います。
コード
ではコードのご紹介です。
//対象の日付オブジェクトを生成
const dt = new Date('2021-01-10'); //2021-01-10
//月初を算出
const startDate = new Date(dt.getFullYear(), dt.getMonth(), 1); //2021-01-01
//月末を算出
const endDate = new Date(dt.getFullYear(), dt.getMonth() + 1, 0); //2021-01-31
事前知識としてJavaScriptのDateオブジェクトの扱い方法は以前の記事でご紹介しています。
月初の取得方法
月初はこちらのコードで算出します。
//月初を算出
const startDate = new Date(dt.getFullYear(), dt.getMonth(), 1);
こちらは単純にDateオブジェクトのコンストラクタ作成時に引数を渡しています。
第1引数と第2引数には対象のオブジェクトの年と月を渡し、第3引数は1を渡してコンストラクタを作成しています。
コンストラクタ作成の詳しいリファレンスはこちらを参考にしてください。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/Date
月末の取得方法
月末はこちらのコードで算出します。
//月末を算出
const endDate = new Date(dt.getFullYear(), dt.getMonth() + 1, 0);
こちらもDateオブジェクトのコンストラクタを作成するのですが、工夫が必要です。
第3引数に0を渡すと先月の最終日を取得できます。
これを利用して月を来月(+1)を渡し、日付に0を渡すことで対象の日付の月末を取得することができます。
これを使うことで月末が30日や31日だろうと、2月の28日だろうと気にせず取得することができます。
終わりに
今回の要点をまとめると以下になります。
- Dateオブジェクトの引数を3つ渡すコンストラクタを利用する。
- 月初は第3引数に1を渡す。
- 月末は第2引数を+1して、第3引数に0を渡す。
JavaScriptのDateオブジェクトは罠が多いと言われ、慣れていないと苦手意識がついてしまいますが、自分でDateオブジェクトをいじることで慣れていきましょう。
月初と月末は分岐条件で使うことがあると思うので、ご参考になればと思います。
ちなみにDateオブジェクトのままだとif文で動かないのでgetTimeメソッドで時間を取得して比較すると良いです。
最後まで読んで頂きありがとうございます!