Beim Vergleichen von Datumsobjekten in Javascript stellte ich fest, dass selbst ein Vergleich desselben Datums nicht true zurückgibt.
var startDate1 = new Date("02/10/2012");
var startDate2 = new Date("01/10/2012");
var startDate3 = new Date("01/10/2012");
alert(startDate1>startDate2); // true
alert(startDate2==startDate3); //false
Wie kann ich die Gleichheit dieser Daten vergleichen? Ich bin daran interessiert, das native Date
Objekt von JS und keine Bibliotheken von Drittanbietern zu verwenden, da es nicht angemessen ist, JS von Drittanbietern nur zum Vergleichen der Daten zu verwenden.
javascript
Harshana
quelle
quelle
Antworten:
Dies liegt daran, dass im zweiten Fall die tatsächlichen Datumsobjekte verglichen werden und zwei Objekte niemals gleich sind. Zwinge sie zur Nummerierung:
Wenn Sie eine explizitere Konvertierung in eine Zahl wünschen, verwenden Sie entweder:
oder
Oh, ein Verweis auf die Spezifikation: §11.9.3 Der abstrakte Gleichheitsvergleichsalgorithmus , der beim Vergleichen von Objekten grundsätzlich besagt,
obj1 == obj2
ist nur dann wahr, wenn sie sich auf dasselbe Objekt beziehen, andernfalls ist das Ergebnis falsch.quelle
Date.prototype.getTime
immer eine Zahl zurückgegeben wird ...getTime
ist. Wahrscheinlich ist die Verwendung aus Gründen der Übersichtlichkeit am besten (und in den von mir getesteten Browsern am schnellsten).Vergleichen Sie die Daten anhand
getTime()
der Anzahl der Millisekunden aus der Epoche (dh einer Zahl):Ziehen Sie auch in Betracht, einen
Date
Konstruktor zu verwenden, der eine explizite Jahres- / Monats- / Datumsnummer verwendet, anstatt sich auf die Zeichenfolgendarstellung zu verlassen (siehe: Date.parse () ). Und denken Sie daran, dass Daten in JavaScript immer in der Zeitzone des Clients (Browsers) dargestellt werden.quelle
Sie müssen die getTime-Methode nicht verwenden. Sie können ein Datumsobjekt von einem anderen Datumsobjekt subtrahieren. Die Millisekunden-Differenz wird zurückgegeben (negativ, wenn die Sekunde ein späteres Datum ist).
// wird mit 0 ausgewertet, wenn die Daten denselben Zeitstempel haben
quelle
Sie können die tatsächlichen Millisekunden vergleichen:
quelle
Sie können auch die Funktion valueOf () verwenden
quelle