2012-03-23 341 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) – 2012-03-23 17:11:28

+2

爲什麼這是一個錯誤?您的開始實際上是在您創建完日期後給出的。 3是4月,只有30天,但你已經將日期設置爲31,這使得5月。幾個月使用0索引。 – kinakuta 2012-03-23 17:12:25

+1

@AdrianIftode - 不,3是4月份 - 月份爲0。 – 2012-03-23 17:25:03

回答

9

月份是基於0 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 

在你的情況下,兩個startend是5月1日2012年就輸出的值,你會看到。

3

您的日期實際上解析爲

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

DateMDN


整數值表示的月份,以0開頭的1月至11月進行。

0

我假設你想看看哪個日期在另一個之前,對嗎?

當你比較兩者時,你並沒有比較你比較對象的實際日期。嘗試if(end.valueOf() < start.valueOf()) { //do stuff }