JavaScriptで月の長さを指定する
Dateオブジェクトの日付を 0 にすると、前の月の最終日になることを利用します。
let date = new Date() let year = date.getFullYear() let month = date.getMonth() let month_days = new Date(year, month + 1, 0).getDate() console.log(month_days)
注意点
以下のようなコードでやると失敗します。
let date = new Date(2019, 8, 31) date.setMonth(date.getMonth() + 1) // 翌月にする date.setDate(0) // 0日にする let month_days = date.getDate() console.log(month_days) // 30
8月は31日ありますが、30が出力されてしまいます。 上のコードでは、Dateオブジェクトの指す日付は以下のように変化します。
- 8/31
- 9/31 -> (10/1) ※9月は30日までなので翌日の10/1となる
- 10/0 -> (9/30)
よって、8月の最終日を出力をするつもりが、9月の最終日が出力されてします。