Wie kann ich überprüfen, ob zwei verschiedene Datumsobjekte dieselben Datumsinformationen haben (mit demselben Tag, Monat, Jahr ...)? Ich habe "==", "===" und .equals ausprobiert, aber keines scheint zu funktionieren.
Antworten:
getTime()
die Zeit in Millisekunden zurückgegeben wird, können beide Zeiten auch einen Unterschied von Millisekunden aufweisen. In dieser Lösung funktioniert es nicht wie erwartet. Versuchen Sie es mittoDateString()
Wenn Sie nur prüfen möchten, ob Daten unabhängig von der Uhrzeit am selben Tag auftreten, können Sie die toDateString()
Methode zum Vergleichen verwenden. Diese Methode gibt nur das Datum ohne Uhrzeit zurück:
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
}
Ich habe diesen Code verwendet:
Date.prototype.isSameDateAs = function(pDate) {
return (
this.getFullYear() === pDate.getFullYear() &&
this.getMonth() === pDate.getMonth() &&
this.getDate() === pDate.getDate()
);
}
Dann nennst du es einfach so: if (aDate.isSameDateAs(otherDate)) { ... }
Geben Sie convert in integers ein:
a = new Date(1995,11,17);
b = new Date(1995,11,17);
+a === +b; //true
Hellnar,
Sie könnten es versuchen (entschuldigen Sie den Funktionsnamen :) - geändert nach dem Wert von felix anstelle von getTime)
function isEqual(startDate, endDate) {
return endDate.valueOf() == startDate.valueOf();
}
Verwendung:
if(isEqual(date1, date2)){
// do something
}
könnte Sie einen Teil des Weges dorthin bringen.
siehe auch:
'http://www.java2s.com/Tutorial/JavaScript/0240__Date/DatevalueOf.htm'
Verwenden Sie für eine bessere Datumsunterstützung die Methoden moment.js und 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 )
Eine einfache einzeilige Alternative, um festzustellen, ob zwei Daten gleich sind, wobei der Zeitteil ignoriert wird:
function isSameDate(a, b) {
return Math.abs(a - b) < (1000 * 3600 * 24) && a.getDay() === b.getDay();
}
Es wird bestimmt, ob sich die Daten a und b nicht mehr als einen Tag unterscheiden und denselben Wochentag haben.
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
>=
der Werte werden in Zahlen umgewandelt. Im Falle==
der Objekte werden selbst verglichen (und nura == a
wäre wahr).