月を入力にして、その時の日数を求めます(一旦うるう年は考えない)
2月を除くと、8月より前の月は奇数の月が、8月移行の月は偶数の月が31日になるので、
30 + ((month > 7) + month) % 2) - 2 * (month === 2)
として計算できる。
うるう年を考慮する場合
うるう年は、400で割り切れるとき、または、4で割り切れかつ100で割り切れない時なので、
year % 400 === 0 || (year % 4 && year % 100 !== 0 )
となる。
この場合、
const leapYear = year % 400 === 0 || (year % 4 && year % 100 !== 0 )
30 + ((month > 7) + month) % 2) - (month === 2 ? (leapYear ? 1 : 2 ): 0)
となる。
もっとシンプルに書きたい。
月ごとの日数↓
月 | 日数 |
---|---|
1 | 31 |
2 | 28 または 29 |
3 | 31 |
4 | 30 |
5 | 31 |
6 | 30 |
7 | 31 |
8 | 31 |
9 | 30 |
10 | 31 |
11 | 30 |
12 | 31 |