¿Cómo puedo comprobar si dos objetos de fecha diferentes tienen la misma información de fecha (que tienen el mismo día, mes, año ...)? He intentado "==", "===" y .equals pero ninguno parece funcionar.
javascript
date
equality
Hellnar
fuente
fuente
>=
los valores se convierten en números. En el caso de que==
los objetos se comparen entre sí (y soloa == a
sería cierto).a.setHours(0,0,0,0);
getTime()
devuelve el tiempo en milisegundos, ambos tiempos también pueden tener una diferencia de milisegundos. En esta solución, no funcionará como se esperaba. Intente usartoDateString()
Si solo está interesado en verificar si las fechas ocurren el mismo día, independientemente de la hora, puede usar el
toDateString()
método para comparar. Este método devuelve solo la fecha sin hora:var start = new Date('2015-01-28T10:00:00Z'); var end = new Date('2015-01-28T18:00:00Z'); if (start.toDateString() === end.toDateString()) { // Same day - maybe different times } else { // Different day }
fuente
Usé este código:
Date.prototype.isSameDateAs = function(pDate) { return ( this.getFullYear() === pDate.getFullYear() && this.getMonth() === pDate.getMonth() && this.getDate() === pDate.getDate() ); }
Entonces simplemente lo llamas como:
if (aDate.isSameDateAs(otherDate)) { ... }
fuente
Escriba convertir a números enteros:
a = new Date(1995,11,17); b = new Date(1995,11,17); +a === +b; //true
fuente
Hellnar,
podría intentar (perdón por el nombre de la función :) - modificado según el valor de Felix, en lugar de getTime)
function isEqual(startDate, endDate) { return endDate.valueOf() == startDate.valueOf(); }
uso:
if(isEqual(date1, date2)){ // do something }
podría llevarte parte del camino allí.
ver también:
'http://www.java2s.com/Tutorial/JavaScript/0240__Date/DatevalueOf.htm'
fuente
Para una mejor compatibilidad con la fecha, use moment.js e isSame método
var starDate = moment('2018-03-06').startOf('day'); var endDate = moment('2018-04-06').startOf('day'); console.log(starDate.isSame(endDate)); // false ( month is different ) var starDate = moment('2018-03-06').startOf('day'); var endDate = moment('2018-03-06').startOf('day'); console.log(starDate.isSame(endDate)); // true ( year, month and day are the same )
fuente
restarlos y compararlos con cero:
var date1 = new Date(); var date2 = new Date();
// haz algo con las fechas ...
(date1 - date2) ? alert("not equal") : alert("equal");
para ponerlo en una variable:
var datesAreSame = !(date1 - date2);
fuente
Una alternativa simple de una sola línea para determinar si dos fechas son iguales, ignorando la parte de tiempo:
function isSameDate(a, b) { return Math.abs(a - b) < (1000 * 3600 * 24) && a.getDay() === b.getDay(); }
Determina si las fechas ayb difieren no más de un día y comparten el mismo día de la semana.
function isSameDate(a, b) { return Math.abs(a - b) < (1000 * 3600 * 24) && a.getDay() === b.getDay(); } console.log(isSameDate(new Date(2017, 7, 21), new Date(2017, 7, 21))); //exact same date => true console.log(isSameDate(new Date(2017, 7, 21, 23, 59, 59), new Date(2017, 7, 21))); //furthest same dates => true console.log(isSameDate(new Date(2017, 7, 20, 23, 59, 59), new Date(2017, 7, 21))); //nearest different dates => false console.log(isSameDate(new Date(2016, 7, 21), new Date(2017, 7, 21))); //different year => false console.log(isSameDate(new Date(2017, 8, 21), new Date(2017, 7, 21))); //different month => false
fuente