2012-03-23 326 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 }