正しいコードは次のとおりです。
function daysInMonth( month, year ) {
var day;
for( var i = 1 ; i <= new Date( year, month, 0 ).getDate() ; i++ ) {
day = new Date( year, month-1, i );
console.log( day, day.getDay() );
}
};
daysInMonth( 12, 2012 );
この問題は、月のインデックスが 0 ~ 11 であることが原因でした。週の最初の日が日曜日の場合:
daysInMonth( 12, 2012 );
Sat Dec 01 2012 00:00:00 GMT+0100 (CET) 6 //Sat
Sun Dec 02 2012 00:00:00 GMT+0100 (CET) 0 //Sun
Mon Dec 03 2012 00:00:00 GMT+0100 (CET) 1 //Mon
...
Mon Dec 31 2012 00:00:00 GMT+0100 (CET) 1 //Mon
代替の短いコード:
function daysInMonth( month, year ) {
for( var i = new Date( year, month, 0 ).getDate(), d = new Date( year, month-1, 1 ).getDay() ; i-- ; )
console.log( d++ % 7 );
};