2012-03-23 3 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 - апрель, который имеет только 30 дней, но вы указали дату 31, что делает ее май. Месяцы используют индекс 0. – kinakuta

+1

@AdrianIftode - Нет, 3 для апреля - Месяцы основаны на 0. –

ответ

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 

В вашем случае как start и end являются 1 мая 2012 года Просто выводить значения, и вы увидите.

3

дата Вашей фактически постановляет

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

От DateMDN:

месяц
значение Integer, представляющий месяц, начиная с 0 за январь 11 за декабрь.

0

Я предполагаю, что вы хотите увидеть, какая дата наступает перед другим, не так ли?

Когда вы сравниваете эти два значения, вы не сравниваете фактические даты, в которых вы сравниваете объекты. Попробуйте if(end.valueOf() < start.valueOf()) { //do stuff }

Смежные вопросы