Сравнение объектов Date Date

При сравнении объектов даты в Javascript я обнаружил, что даже сравнение одной и той же даты не возвращает true.

 var startDate1 = new Date("02/10/2012");
 var startDate2 = new Date("01/10/2012");
 var startDate3 = new Date("01/10/2012");
 alert(startDate1>startDate2); // true
 alert(startDate2==startDate3); //false

Как я могу сравнить равенство этих дат? Я заинтересован в использовании родного Date объекта JS, а не каких-либо сторонних библиотек, поскольку он не подходит для использования сторонних JS только для сравнения дат.

Ответ 1

Это потому, что во втором случае сравниваются фактические объекты даты, а два объекта никогда не равны друг другу. Подключите их к числу:

 alert( +startDate2 == +startDate3 ); // true

Если вы хотите, чтобы более простое преобразование отображалось в число, используйте либо:

 alert( startDate2.getTime() == startDate3.getTime() ); // true

или

 alert( Number(startDate2) == Number(startDate3) ); // true

О, ссылка на спецификацию: §11.9.3 Алгоритм сравнения абстрактного равенства, который в основном говорит при сравнении объектов, obj1 == obj2 является истинным, только если они ссылаются к одному и тому же объекту, иначе результат будет ложным.

Ответ 2

Сравните даты с помощью getTime(), возвращающего число миллисекунд с эпохи (например, число):

var startDate1 = new Date("02/10/2012");
var startDate2 = new Date("01/10/2012");
var startDate3 = new Date("01/10/2012");
alert(startDate1.getTime() > startDate2.getTime()); // true
alert(startDate2.getTime() == startDate3.getTime()); //true

Также рассмотрите возможность использования конструктора Date, использующего явный номер года/месяца/даты, а затем опираясь на строковое представление (см. Date.parse()). И помните, что даты в JavaScript всегда отображаются с использованием часового пояса клиента (браузера).

Ответ 3

Вам не нужно использовать метод getTime - вы можете вычесть объект даты из другого объекта даты. Он вернет разницу в миллисекундах (отрицательная, если вторая - более поздняя)

var startDate1 = new Date("02/10/2012");
var startDate2 = new Date("01/10/2012");

var diff= (startDate1 -startDate2)

//оценивает значение 0, если даты имеют одинаковую метку времени

Ответ 4

вы можете сравнить фактические миллисекунды:

alert(startDate2.getTime() === startDate3.getTime());

Ответ 5

Вы также можете использовать функцию valueOf()

 var startDate1 = new Date("02/10/2012").valueOf();
 var startDate2 = new Date("01/10/2012").valueOf();
 var startDate3 = new Date("01/10/2012").valueOf();
 alert(startDate1>startDate2); // 1326150000000 > 1328828400000   true
 alert(startDate2==startDate3); // 1328828400000 > 1326150000000  false