Überprüfen, ob zwei Daten die gleichen Datumsinformationen haben


82

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:


137

Sie können verwenden valueOf()oder getTime():

a = new Date(1995,11,17);
b = new Date(1995,11,17);

a.getTime() === b.getTime() // prints true

18
Denn im Falle >=der Werte werden in Zahlen umgewandelt. Im Falle ==der Objekte werden selbst verglichen (und nur a == awäre wahr).
Felix Kling


1
Wenn Sie dies verwenden, stellen Sie sicher, dass die Zeitteile dank der Funktiona.setHours(0,0,0,0);
setHours

1
Dies wird nicht funktionieren, wenn es einen Unterschied von Millisekunden gibt. Da 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()
Rehan Sattar

41

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
}

40

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)) { ... }


Warum sollten Sie ein Dutzend Funktionen ausführen, wenn Sie getTime () nur zweimal verwenden können? Oh, haben Sie darüber nachgedacht, Unterschiede in Stunde, Monat und Jahr zu ignorieren? In diesem Fall spielen möglicherweise Überlegungen zur Zeitzone eine Rolle?
ErikE

13
Weil die Frage lautete "zwei verschiedene Datumsobjekte haben die gleichen Datumsinformationen" und dieser Code genau das tut: vergleicht Datumsangaben unabhängig von der Uhrzeit
übrigens

2
ähm, ich wollte sagen "Unterschiede in Stunde, Minute und Sekunde ignorieren"
ErikE

14

Geben Sie convert in integers ein:

a = new Date(1995,11,17);
b = new Date(1995,11,17);
+a === +b;  //true

4
fantastische Verwendung von Unary Operator
KingOfHypocrites

6

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'


4

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 )

3

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);

3

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.