2012-03-23 28 views
2

なぜこれは正しく動作しないのですか?Javascriptの日付比較のバグ?

function test() { 
    var start = new Date(2012, 3, 31, 19, 0, 0); // 3/31/2012 7:00 PM 
    var end = new Date(2012, 4, 1, 1, 0, 0);  // 4/01/2012 1:00 AM 

    if (end < start) 
     console.log("oops!"); 
    else 
     console.log("works!"); 
} 

出力:

おっと!

+1

[JavaScript Date Object Comparison](http://stackoverflow.com/questions/7606798/javascript-date-object-comparison)の重複が可能です –

+2

これはなぜバグですか?あなたが作成した日付が与えられてから実際にあなたの終わりが始まります。 3は4月で30日しかありませんが、日付を31に設定すると5月になります。月は0のインデックスを使用します。 – kinakuta

+1

@AdrianIftode - いいえ、3は4月です - 月は0ベースです。 –

答えて

9

ヶ月間はJS

var start = new Date(2012, 2, 31, 19, 0, 0); // 3/31/2012 7:00 PM 
var end = new Date(2012, 3, 1, 1, 0, 0);  // 4/01/2012 1:00 AM 

で0ベースされているあなたのケースではstartendの両方が値を5月1日、2012年だけで出力され、あなたが表示されます。

3

あなたの日付は、実際にDateMDNから

Tue May 01 2012 19:00:00 GMT-0700 (PDT) 
Tue May 01 2012 01:00:00 GMT-0700 (PDT) 

に解決:月を表す


整数値を、12月のために11年1月は0から始まります。

0

あなたは、どの日付が他の日付の前に来るかを知りたいと思いますか?

2つを比較すると、オブジェクトを比較している実際の日付が比較されません。お試しくださいif(end.valueOf() < start.valueOf()) { //do stuff }