Jak mogę sprawdzić, czy dwa różne obiekty daty mają te same informacje o dacie (mają ten sam dzień, miesiąc, rok ...)? Próbowałem "==", "===" i .equals, ale żaden z nich nie działa.
Odpowiedzi:
a.setHours(0,0,0,0);
getTime()
zwraca czas w milisekundach, oba te czasy mogą mieć również różnicę w milisekundach. W tym rozwiązaniu nie będzie działać zgodnie z oczekiwaniami. Spróbuj użyćtoDateString()
Jeśli interesuje Cię tylko sprawdzenie, czy daty przypadają w tym samym dniu bez względu na godzinę, możesz skorzystać z toDateString()
metody porównania. Ta metoda zwraca tylko datę bez godziny:
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
}
Użyłem tego kodu:
Date.prototype.isSameDateAs = function(pDate) {
return (
this.getFullYear() === pDate.getFullYear() &&
this.getMonth() === pDate.getMonth() &&
this.getDate() === pDate.getDate()
);
}
Następnie nazywasz to po prostu: if (aDate.isSameDateAs(otherDate)) { ... }
Wpisz konwertuj na liczby całkowite:
a = new Date(1995,11,17);
b = new Date(1995,11,17);
+a === +b; //true
Hellnar,
możesz spróbować (przepraszam za nazwę funkcji :) - zmieniono na wartość felix zamiast getTime)
function isEqual(startDate, endDate) {
return endDate.valueOf() == startDate.valueOf();
}
stosowanie:
if(isEqual(date1, date2)){
// do something
}
może Cię tam dostać.
Zobacz też:
„http://www.java2s.com/Tutorial/JavaScript/0240__Date/DatevalueOf.htm”
Aby uzyskać lepszą obsługę dat, użyj moment.js i metody isSame
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 )
Prosta, jednowierszowa alternatywa dla określenia, czy dwie daty są równe, z pominięciem części czasowej:
function isSameDate(a, b) {
return Math.abs(a - b) < (1000 * 3600 * 24) && a.getDay() === b.getDay();
}
Określa, czy daty a i b różnią się nie więcej niż jeden dzień i mają ten sam dzień tygodnia.
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
>=
wartości są przeliczane na liczby. W przypadku==
obiektów porównywane są same (i tylkoa == a
byłoby to prawdą).