2008-12-03 22 views

Antwort

200
if (date1.getTime() > date2.getTime()) { 
    alert("The first date is after the second date!"); 
} 

Reference to Date object

+2

hatte ich diesen Vorschlag, aber die getTime Funktion gibt einen undefinierten Wert. Ich glaube nicht, dass ich die getTime() verstehe. Soll das eine vordefinierte Funktion sein? –

+1

hoffe das hilft http://www.comptechdoc.org/independent/web/cgi/javamanual/javadate.html – IsmailS

+3

Es scheint wie Chrome und Firefox unterstützt 'date1> date2', das heißt, ohne den getTime() Teil. Wer kennt die anderen Browser? –

4

können Sie den getTime() -Methode bei einem Date-Objekt verwenden, um die Zeitstempel (in Millisekunden) relativ zum 1. Januar erhalten 1970. Wenn Sie Ihre zwei Daten in integer konvertieren Zeitstempel, können Sie den Unterschied dann vergleichen, indem Sie sie subtrahieren. Das Ergebnis wird in Millisekunden sein, also dividieren Sie einfach durch 1000 für Sekunden, dann 60 für Minuten, etc.

6

JavaScript-Daten können mit den gleichen Vergleichsoperatoren verglichen werden, die die anderen Datentypen verwenden:>, <, < = ,> =, ==,! =, ===,! ==.

Wenn Sie zwei Daten A und B, dann A < B, wenn A weiter zurück in die Vergangenheit, als B. ist

Aber es klingt wie das, was Sie Probleme mit ist eine Zeichenkette in ein Datum Dreh . Sie tun das, indem man einfach die Zeichenfolge als Argument für ein neues Datum vorbei:

var someDate = new Date("12/03/2008"); 

oder, wenn die Zeichenfolge, die Sie wollen, dass der Wert eines Formularfeld ist, wie es es vielleicht scheint sein:

var someDate = new Date(document.form1.Textbox2.value); 

Sollte diese Zeichenfolge nicht etwas sein, das JavaScript als Datum erkennt, erhalten Sie immer noch ein Date-Objekt, das jedoch "ungültig" ist. Jeder Vergleich mit einem anderen Datum ergibt false. Wenn es in eine Zeichenfolge umgewandelt wird, wird es "ungültiges Datum". Seine Funktion getTime() gibt NaN zurück, und das Aufrufen von isNaN() für das Datum selbst gibt true zurück; Das ist der einfache Weg zu überprüfen, ob eine Zeichenfolge ein gültiges Datum ist.

+1

Was passiert, wenn die Zeichenfolge nicht zu einem Datum geparst werden kann? –

+0

Dann erhalten Sie immer noch ein Date-Objekt, aber es ist ungültig. Jeder Vergleich mit einem anderen Datum ergibt false. Die Funktion getTime() gibt NaN zurück, und das Aufrufen von isNaN() am Datum selbst gibt true zurück. Wenn es in eine Zeichenfolge umgewandelt wird, wird es "ungültiges Datum". –

+21

Dies funktioniert nicht mit == (zumindest auf Firefox). Wenn Sie zwei Daten direkt vergleichen, wird immer false zurückgegeben. Sie müssen getTime() wie oben erwähnt verwenden. –

1

Ich würde eher das Datum valueOf-Methode verwenden, statt === oder! ==

Scheint, wie === ist die interne Objektverweise und nichts über Datum zu vergleichen.

0

Sie könnten versuchen, den folgenden Skriptcode, diese zu implementieren:

if(CompareDates(smallDate,largeDate,'-') == 0) { 
    alert('Selected date must be current date or previous date!'); 
return false; 
} 

function CompareDates(smallDate,largeDate,separator) { 
    var smallDateArr = Array(); 
    var largeDateArr = Array(); 
    smallDateArr = smallDate.split(separator); 
    largeDateArr = largeDate.split(separator); 
    var smallDt = smallDateArr[0]; 
    var smallMt = smallDateArr[1]; 
    var smallYr = smallDateArr[2]; 
    var largeDt = largeDateArr[0]; 
    var largeMt = largeDateArr[1]; 
    var largeYr = largeDateArr[2]; 

    if(smallYr>largeYr) 
     return 0; 
else if(smallYr<=largeYr && smallMt>largeMt) 
    return 0; 
else if(smallYr<=largeYr && smallMt==largeMt && smallDt>largeDt) 
    return 0; 
else 
    return 1; 
} 
10
new Date('1945/05/09').valueOf() < new Date('2011/05/09').valueOf() 
+0

hallo Sie verwenden dieses Format dann ist es var dt = neues Datum ("2016-01-01") dann ist die Zeit nicht Null es wird falsch angezeigt – Paresh3489227

+0

Sorry, was ist mit dem Format falsch oder was ist Ihr Anliegen? –

+0

funktioniert gut dank – Paresh3489227

0

Sie diesen Code zur Überprüfung versuchen können, welche Datumswert ist der höchste von zwei Daten mit einem Format MM/DD/YYYY

function d_check() { 
    var dl_sdt=document.getElementIdBy("date_input_Id1").value; //date one 
    var dl_endt=document.getElementIdBy("date_input_Id2").value; //date two 

    if((dl_sdt.substr(6,4)) > (dl_endt.substr(6,4))) { 
     alert("first date is greater"); 
     return false; 
    } 

    else if((((dl_sdt.substr(0,2)) > (dl_endt. 
     substr(0,2)))&&(frdt(dl_sdt.substr(3,2)) > (dl_endt.substr(3,2))))|| 
     (((dl_sdt.substr(0,2)) > (dl_endt.substr(0,2)))&& 
     ((dl_sdt.substr(3,2)) < (dl_endt.substr(3,2))))|| 
     (((dl_sdt.substr(0,2)) == (dl_endt.substr(0,2)))&&((dl_sdt.substr(3,2)) > 
     (dl_endt.substr(3,2))))) { 
      alert("first date is greater"); 
     return false; 
    } 

    alert("second date is digher"); 
    return true; 
} 

/* dies überprüfen .... ein Formular erstellen und ids zu zwei Datum inputs.The Datumsformat geben sollte mm/tt/oder mm-dd-yyyy oder mm: dd: yyyy oder mm.dd.yyyy gefällt das.*/

+0

Sehr gute Funktion, bis auf eine kleine Sache. Es wird angenommen, dass die Benutzereingabe immer einem bestimmten Datumsmuster folgt (die Verwendung von Teilzeichenfolgen). Ich denke, ich könnte das verwenden, aber mit ein paar Input-Validierung, danke. – Kingsolmn

+0

Dies macht einige große Annahmen über das Datumsformat und verwendet keine internationalen Datumsstandards. – Hennaz

1
function fn_DateCompare(DateA, DateB) {  // this function is good for dates > 01/01/1970 

    var a = new Date(DateA); 
    var b = new Date(DateB); 

    var msDateA = Date.UTC(a.getFullYear(), a.getMonth()+1, a.getDate()); 
    var msDateB = Date.UTC(b.getFullYear(), b.getMonth()+1, b.getDate()); 

    if (parseFloat(msDateA) < parseFloat(msDateB)) 
     return -1; // lt 
    else if (parseFloat(msDateA) == parseFloat(msDateB)) 
     return 0; // eq 
    else if (parseFloat(msDateA) > parseFloat(msDateB)) 
     return 1; // gt 
    else 
     return null; // error 
} 
+1

Das Hinzufügen von eins zu "a/b.getMonth()" bewirkt, dass Januar, das "0" ist, zu "1" wird, was als Februar in die Date.UTC-Methode übersetzt wird. Siehe den MDN-Artikel: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC. Der Abschnitt über akzeptable Werte für den Parameter 'Monat'. Versuchen Sie zum Beispiel, die Daten '1.2.2017 'und '31.01.2017' mit Ihrer Funktion zu vergleichen. – papiro

0
function validateform() 
    { 
    if (trimAll(document.getElementById("<%=txtFromDate.ClientID %>").value) != "") { 
    if (!isDate(trimAll(document.getElementById("<%=txtFromDate.ClientID %>").value))) 
     msg = msg + "<li>Please enter valid From Date in mm/dd/yyyy format\n"; 
    else { 
     var toDate = new Date(); 
     var txtdate = document.getElementById("<%=txtFromDate.ClientID %>").value; 
     var d1 = new Date(txtdate) 
    if (Date.parse(txtdate) > Date.parse(toDate)) {     
     msg = msg + "<li>From date must be less than or equal to today's date\n"; 
    } 
    } 
} 

    if (trimAll(document.getElementById("<%=txtToDate.ClientID %>").value) != "") { 
      if (!isDate(trimAll(document.getElementById("<%=txtToDate.ClientID %>").value))) 
       msg = msg + "<li>Please enter valid To Date in mm/dd/yyyy format\n"; 
      else { 
       var toDate = new Date(); 
       var txtdate = document.getElementById("<%=txtToDate.ClientID %>").value; 
       var d1 = new Date(txtdate) 

       if (Date.parse(txtdate) > Date.parse(toDate)) { 
        msg = msg + "<li>To date must be less than or equal to today's date\n"; 
        } 
       } 
       }