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