Compara dos fechas con JavaScript

Resuelto Alex asked hace 15 años • 48 respuestas

¿Alguien puede sugerir una forma de comparar los valores de dos fechas mayores que, menores que y no en el pasado usando JavaScript? Los valores provendrán de cuadros de texto.

Alex avatar Jan 30 '09 02:01 Alex
Aceptado

El objeto Fecha hará lo que usted quiera: construir uno para cada fecha y luego compararlos usando >, <o <=.>=

Los operadores ==, !=, ===y !==requieren que los use date.getTime()como en

var d1 = new Date();
var d2 = new Date(d1);
var same = d1.getTime() === d2.getTime();
var notSame = d1.getTime() !== d2.getTime();

Para ser claros, simplemente verificar la igualdad directamente con los objetos de fecha no funcionará

var d1 = new Date();
var d2 = new Date(d1);

console.log(d1 == d2);   // prints false (wrong!) 
console.log(d1 === d2);  // prints false (wrong!)
console.log(d1 != d2);   // prints true  (wrong!)
console.log(d1 !== d2);  // prints true  (wrong!)
console.log(d1.getTime() === d2.getTime()); // prints true (correct)

Sin embargo, le sugiero que utilice menús desplegables o alguna forma restringida similar de entrada de fecha en lugar de cuadros de texto, para que no se encuentre en un infierno de validación de entradas.


Para los curiosos, date.getTime()documentación :

Devuelve el valor numérico de la fecha especificada como el número de milisegundos desde el 1 de enero de 1970 a las 00:00:00 UTC. (Se devuelven valores negativos para momentos anteriores).

moonshadow avatar Jan 29 '2009 19:01 moonshadow

Compare <y >como de costumbre, pero cualquier cosa que involucre ==o ===debe usar un +prefijo. Al igual que:

const x = new Date('2013-05-23');
const y = new Date('2013-05-23');

// less than, greater than is fine:
console.log('x < y', x < y); // false
console.log('x > y', x > y); // false
console.log('x <= y', x <= y); // true
console.log('x >= y', x >= y); // true
console.log('x === y', x === y); // false, oops!

// anything involving '==' or '===' should use the '+' prefix
// it will then compare the dates' millisecond values

console.log('+x === +y', +x === +y); // true
Expandir fragmento

Daniel Lidström avatar May 23 '2013 12:05 Daniel Lidström