Bestimmen der Datumsgleichheit in Javascript

69

Ich muss herausfinden, ob zwei Daten, die der Benutzer auswählt, in Javascript gleich sind. Die Daten werden in einem String ("xx / xx / xxxx") an diese Funktion übergeben. Das ist die Granularität, die ich brauche.

Hier ist mein Code:

        var valid = true;
    var d1 = new Date($('#datein').val());
    var d2 = new Date($('#dateout').val());
    alert(d1+"\n"+d2);
    if(d1 > d2) {
        alert("Your check out date must be after your check in date.");
        valid = false;
    } else if(d1 == d2) {
        alert("You cannot check out on the same day you check in.");
        valid = false;
    }

Die Javascript-Warnung nach dem Konvertieren der Daten in Objekte sieht folgendermaßen aus:

Di 25.01.2011 00:00:00 GMT-0800 (pazifische Standardzeit)

Di 25.01.2011 00:00:00 GMT-0800 (pazifische Standardzeit)

Der Test, um festzustellen, ob Datum 1 größer als Datum 2 ist, funktioniert. Bei Verwendung der Operatoren == oder === wird die Gültigkeit jedoch nicht in false geändert.

Erschüttert
quelle
3
Haben Sie diesen Beitrag ausgecheckt : stackoverflow.com/questions/338463/… . Hilft es?
John Merlino
Ich bin versucht, dies als Duplikat zu kennzeichnen, aber ich denke, dies ist ein Randfall des gleichen Problems, also bin ich es nicht.
Liam
Dies ist kein Duplikat. In dem erwähnten Beitrag (und der akzeptierten Antwort) geht es darum, festzustellen, ob ein Datum vor oder nach einem anderen liegt, und nicht um Gleichheit.
Yannick1976

Antworten:

140

Verwenden Sie die getTime()Methode. Es überprüft den numerischen Wert des Datums und funktioniert sowohl für die Prüfungen größer als / kleiner als auch für die Prüfungen gleich.

BEARBEITEN:

if (d1.getTime() === d2.getTime())
Spinon
quelle
1
Die oben gestellte Frage zum Stapelüberlauf zeigt ein Beispiel. Die Fragen waren identisch.
John Merlino
16
Ein einfacher Weg:if( +d1 == +d2 )
GetFree
3
Sie wären überrascht, wie diese Fragen Entwicklern nach Jahren weiter helfen :-)
ManishKG
18

Wenn Sie nicht anrufen möchten, getTime()versuchen Sie einfach Folgendes:

(a >= b && a <= b)

devmiles.com
quelle
17
WTF? Warum funktioniert das, der Gleichheitsoperator jedoch nicht? Wo ist der Sinn darin?
Küpper
9
Der Gleichheitsoperator prüft auf Referenzgleichheit. Dies bedeutet, dass nur dann true zurückgegeben wird, wenn die beiden Variablen auf dasselbe Objekt verweisen. Wenn Sie zwei Datumsobjekte ( var a = new Date(); var b = new Date();) erstellen , sind diese niemals gleich.
Tomas
4
@ devmiles.com mit Ausnahme von Zeichenfolgen, die auch nach Wert verglichen werden, var a ="str1"; var b = "str"+"1"; a == b // true
amd
7
komisch. Sie hätten gedacht, dies wäre tatsächlich ein Ort gewesen, an dem eine Trennung zwischen == und === Sinn machen würde ... Oh, warten Sie, es ist Javascript. Wir machen hier keinen Sinn!
JonnyRaa
7
@Towa, das funktioniert, weil die Operatoren> = und <= nur mit Zahlen arbeiten, also versuchen sie, ihre Operanden in Zahlen umzuwandeln. Um ein Objekt (z. B. ein Datum) in eine Zahl umzuwandeln, ruft JavaScript die Funktion valueOf () auf, um eine numerische Darstellung zu erhalten. valueOf () gibt dasselbe zurück wie getTime (): developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Mike Schenk
2
var d1 = new Date($('#datein').val());
var d2 = new Date($('#dateout').val());

Verwenden Sie zwei einfache Methoden, um die Gleichheit zu überprüfen

  1. if( d1.toString() === d2.toString())
  2. if( +d1 === +d2)
Arjun Kubendran
quelle