Сравнение Объектов Даты 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 только для сравнения дат.

319   4  

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, если даты имеют одинаковую метку времени

вы можете сравнить фактический МС :

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

Comments

    Ничего не найдено.