Al comparar objetos de fecha en Javascript, descubrí que incluso comparar la misma fecha no devuelve verdadero.
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
¿Cómo comparar la igualdad de estas fechas? Estoy interesado en utilizar el Date
objeto nativo de JS y no bibliotecas de terceros, ya que no es apropiado usar un JS de terceros solo para comparar las fechas.
javascript
Harshana
fuente
fuente
Respuestas:
Esto se debe a que en el segundo caso, los objetos de fecha reales se comparan y dos objetos nunca son iguales entre sí. Obligarlos a numerar:
alert( +startDate2 == +startDate3 ); // true
Si desea una conversión más explícita a un número, use:
alert( startDate2.getTime() == startDate3.getTime() ); // true
o
alert( Number(startDate2) == Number(startDate3) ); // true
Oh, una referencia a la especificación: §11.9.3 El algoritmo de comparación de igualdad abstracta que básicamente dice que cuando se comparan objetos,
obj1 == obj2
es verdadero solo si se refieren al mismo objeto; de lo contrario, el resultado es falso.fuente
Date.prototype.getTime
siempre devolverá un Número ...getTime
sea mejor para mayor claridad (y resulta que es más rápido en los navegadores que probé también).Compare las fechas utilizando el
getTime()
número de milisegundos de retorno de la época (es decir, un número):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
También considere usar el
Date
constructor tomando un número explícito de año / mes / fecha en lugar de confiar en la representación de cadena (ver: Date.parse () ). Y recuerde que las fechas en JavaScript siempre se representan usando la zona horaria del cliente (navegador).fuente
No es necesario utilizar el método getTime; puede restar un objeto de fecha de otro objeto de fecha. Devolverá la diferencia de milisegundos (negativo, si el segundo es una fecha posterior)
var startDate1 = new Date("02/10/2012"); var startDate2 = new Date("01/10/2012"); var diff= (startDate1 -startDate2)
// evalúa a 0 si las fechas tienen la misma marca de tiempo
fuente
puede comparar los milisegundos reales:
fuente
También puede utilizar la función 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
fuente