¿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.
Respuestas:
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
}
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)) { ... }
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'
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 )
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
>=
los valores se convierten en números. En el caso de que==
los objetos se comparen entre sí (y soloa == a
sería cierto).