各月の日数は決まっている。例外は閏年で変わる2月だけ。
- 31日まであるのは1、3、5、7、8、10、12月。
- 残りの2、4、6、9、11月は2月を除き全て30日まで。
月 | 日数 |
---|---|
1 | 31 |
2 | 28 or 29 |
3 | 31 |
4 | 30 |
5 | 31 |
6 | 30 |
7 | 31 |
8 | 31 |
9 | 30 |
10 | 31 |
11 | 30 |
12 | 31 |
覚え方
「にしむくさむらい(士)」 の語呂合わせで、31日でない月は覚えられる。
2, 4, 6, 9, 11。
JavaScript的には
上記の基本日数を配列に格納しておき(2月は28)、
閏年判定さえできれば、各月が何日までなのかはDateオブジェクト無しで求めることができる。
閏年判定について
- 4で割り切れる年である。
- 4と100で割り切れるが、400で割り切れない年は例外的に平年とする(4と100と400で全て割り切れる場合は閏年)
例: 2004年、2008年、2012年は4で割り切れるので閏年。
2100年、2200年、2300年は4と100で割り切れるが400で割り切れないので平年。
2400年は4と100で割り切れて、400でも割り切れるので閏年。
var isLeapYear = function(y){
return y % 4 === 0 && (y % 100 !== 0 || y % 400 === 0);
};
var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var year = 2012,
month = 1,
lastDay = days[month - 1]; // 31
if(isLeapYear(year) && month === 2){
lastDay = 29;
}