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オブジェクトの指す日付は以下のように変化します。

  1. 8/31
  2. 9/31 -> (10/1) ※9月は30日までなので翌日の10/1となる
  3. 10/0 -> (9/30)

よって、8月の最終日を出力をするつもりが、9月の最終日が出力されてします。

参考

developer.mozilla.org