2017-04-10 3 views
2

ich diese einfache js Funktion haben:Datum Vergleichsoperator - logische Ausgabe

function checkTime() { 
    var d1 = new Date(); 
    var d2 = new Date('April 10, 2017 12:11:00'); 

    if (d1 < d2) { 
    $('#modalnew').modal('show'); 
    } else { 
    window.location.replace('https://www.example.php'); 
    } 
} 

Es funktioniert gut, aber ich verstehe nicht das Datum Vergleich. Dies kann eine "dumme" Frage sein, aber ich kann keine Antworten auf Google finden. F.E .: - kein Code, nur ein Beispiel -

d1 (now) = April 10, 2017 12:22:00 
d2 (date set) = April 10, 2017 12:11:00 

Warum ist die d1 weniger als d2 und aktiviert die window.location? In einer logischen Reihenfolge d1 ist es 11 Minuten größer als d2. Auf welchem ​​Parameter wird genau verglichen?

+0

Dies könnte helfen: http://stackoverflow.com/questions/492994/Vergleichs- zweiDaten-mit-javascript – Rajesh

+1

d1

+1

Abstimmung zu schließen, weil die OP-Annahme eindeutig falsch ist und nicht einmal eine Antwort benötigt. –

Antwort

2

In Ihrem Fall d1 ist nicht weniger, aber mehr als d2 was das erwartete Ergebnis ist und daher die window.location.replace ausgeführt wird.

Während das Datum zu vergleichen wertet es, wenn (d1.valueOf()< d2.valueOf()). valueOf() liefert Zeit in milliseconds seit Anfang 00:00:00 UTC Thursday 1, January 1970 und vergleicht es dann. gemäß Weltzeit

+0

Ahh, okay, es zählt also immer weiter und das aktuelle Datum ist immer kleiner als ein Datum in der Zukunft? – CodeNewb

+0

Ja wird es sein, da es seit einer bestimmten Zeit gemessen –

+0

Vielen Dank, das macht es klar! :) Ich werde Ihre Antwort als richtig markieren, wie es in ein paar Minuten möglich ist. – CodeNewb

2

So vergleichen Sie zwei Tage, die Sie besser Date.prototype.getTime() Methode verwenden, die den numerischen Wert zurück in die Zeit für das angegebene Datum entspricht. Die Ergebnisnummer für jedes Datum d1 und d2 wird das kurze und größere Datum besser erklären.

Code:

function checkTime() { 
    var d1 = new Date(); 
    var d2 = new Date('April 10, 2017 12:11:00'); 

    d1.getTime() < d2.getTime() 
    ? $('#modalnew').modal('show') 
    : window.location.replace('https://www.example.php'); 
} 
+1

Nein, falsch. Sie können Daten mit '<' and '>' vergleichen. es ist das '==' und '===', das Problem verursachen (geben Sie immer falsch zurück, wenn Daten identisch sind). –

+0

@SalmanA zu überprüfen, dass [Date.prototype.getTime()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime) -Methode den numerischen Wert zurückgibt, entsprechend die Zeit für das angegebene Datum gemäß der universellen Zeit. So können Sie numerische Werte mit '' <' and '> –

+0

vergleichen ich sage ist, dass zwei 'Date's direkt' Verwendung verglichen werden können <' and '> '(und' <=' and '> = '). Diese Operatoren rufen die '.valueOf()' Methode hinter den Szenen auf, die für Daten den gleichen Wert wie '.getTime()' liefert. OPs Code ist korrekt und Ihre Antwort ist überflüssig. –