Сравните даты JavaScript - PullRequest
4 голосов
/ 18 июля 2009

Я сравниваю даты с чем-то вроде этого:

var dt = new Date();    

dt.setDate("17");               
dt.setMonth(06); 
dt.setYear("2009");

var date = new Date();

console.log("dt(%s) == date(%s) == (%s)", dt, date, (dt == date) );

if( now == dt ) {
    ....
}

Строковые значения, конечно, динамические.

В логах вижу:

dt(Fri Jul 17 2009 18:36:56 GMT-0500 (CST)) == date(Fri Jul 17 2009 18:36:56 GMT-0500 (CST) == (false)

Я пробовал .equals (), но он не работал (я пробовал Java-часть JavaScript: P)

Как я могу сравнить эти даты, чтобы они вернули истину?

Ответы [ 3 ]

8 голосов
/ 18 июля 2009

Следующий код должен решить вашу проблему:

(myDate.getTime() == myOtherDate.getTime())

Проблема в том, что когда вы пишете:

(myDate == myOtherDate)

... вы на самом деле спрашиваете: «myDate указывает на тот же объект, на который указывает myOtherDate?», А не «1009 * идентичен myOtherDate?».

Решение состоит в том, чтобы использовать getTime для получения числа, представляющего объект Date (а поскольку getTime возвращает количество миллисекунд с момента начала эпохи, это число будет точным представлением даты объект), а затем используйте это число для сравнения (сравнение чисел будет работать, как и ожидалось).

Steve

3 голосов
/ 18 июля 2009

Проблема с вашим кодом в том, что вы сравниваете часть времени / даты, а не только дату.

Попробуйте этот код:

    var myDate = new Date();
    myDate.setDate(17);
    myDate.setMonth(7);
    myDate.setYear(2009);

    //Delay code - start
    var total = 0;
    for(var i=0; i<10000;i++)
        total += i;
    //Delay code - end

    var now = new Date();

    console.log(now.getTime() == myDate.getTime());

Если вы сохраняете код цикла for (определяемый как «Delay code -start»), консоль будет показывать «false», а если вы удаляете код цикла for, консоль будет записывать «true», даже если в обоих случаях myDate 17.07.2009 и «сейчас» 17.07.2009.

Проблема в том, что в объекте JavaScript в датах хранятся как дата , так и время . Если вы хотите сравнить только часть даты, вы должны написать код.

function areDatesEqual(date1, date2)
{
    return date1.getFullYear() == date2.getFullYear() 
            && date1.getMonth() == date2.getMonth()
            && date1.getDate() == date2.getDate();
}

Эта функция выведет «true», если два javascript «date part» равны, игнорируя связанную часть времени.

0 голосов
/ 01 марта 2013
=> (myDate.getTime() == myOtherDate.getTime())

(myDate == myOtherDate) не работает, он сравнивает два объекта (указателя) вместо значения, которое они содержат. Используйте getTime, чтобы получить целочисленное представление даты, а затем сравнить.

...