При сравнении объектов даты в Javascript я обнаружил, что даже сравнение одной и той же даты не возвращает истину.
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 только для сравнения дат.
javascript
Харшана
источник
источник
Ответы:
Это потому, что во втором случае сравниваются фактические объекты даты, и два объекта никогда не равны друг другу. Заставьте их пронумеровать:
alert( +startDate2 == +startDate3 ); // true
Если вы хотите более явное преобразование в число, используйте:
alert( startDate2.getTime() == startDate3.getTime() ); // true
или
alert( Number(startDate2) == Number(startDate3) ); // true
О, ссылка на спецификацию: §11.9.3 Алгоритм сравнения абстрактного равенства, который в основном говорит при сравнении объектов,
obj1 == obj2
истинен, только если они относятся к одному и тому же объекту, иначе результат будет ложным.источник
Date.prototype.getTime
всегда будет возвращать число ...getTime
лучше всего для ясности (и оказывается самым быстрым в браузерах, которые я тестировал).Сравните даты, используя
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 всегда представлены с использованием часового пояса клиента (браузера).источник
Вам не нужно использовать метод getTime - вы можете вычесть объект даты из другого объекта даты. Он вернет разницу в миллисекундах (отрицательную, если вторая - более поздняя дата)
var startDate1 = new Date("02/10/2012"); var startDate2 = new Date("01/10/2012"); var diff= (startDate1 -startDate2)
// оценивается как 0, если даты имеют одинаковую метку времени
источник
вы можете сравнить фактические миллисекунды:
источник
Вы также можете использовать функцию 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
источник