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.
javascript
date
equality
Hellnar
quelle
quelle
>=
der Werte werden in Zahlen umgewandelt. Im Falle==
der Objekte werden selbst verglichen (und nura == a
wäre wahr).a.setHours(0,0,0,0);
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 }
quelle
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)) { ... }
quelle
Geben Sie convert in integers ein:
a = new Date(1995,11,17); b = new Date(1995,11,17); +a === +b; //true
quelle
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'
quelle
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 )
quelle
subtrahieren Sie sie und vergleichen Sie sie mit Null:
var date1 = new Date(); var date2 = new Date();
// mach was mit den Daten ...
(date1 - date2) ? alert("not equal") : alert("equal");
um es in eine Variable zu setzen:
var datesAreSame = !(date1 - date2);
quelle
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
quelle