0

以下のコードを使用して月の日を確認していますが、機能していません。これについて私を助けてください

  function daysInMonth(month, year) {
     var length =  new Date(year, month, 0).getDate();
     for(var i = 1; i < = length; i++)
     {
         console.log(new Date(year,month,i).getDay());
     }
  };

ここにフィドルがあります。それは私に間違った結果を返します..

4

3 に答える 3

1

正しいコードは次のとおりです。

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 );
};
于 2012-12-15T13:30:26.090 に答える
1
于 2012-12-15T13:20:09.270 に答える
0

これは機能します:

console.log(new Date('12/15/2012').getDay());​

ポール S. は正しかった、次のように動作します。

console.log(new Date(2012, 11, 15));​

あなたの例では、月が0から始まるようです:

daysInMonth(11,2012);​
于 2012-12-15T13:23:52.800 に答える