2791 Stimmen

Zwei Daten mit JavaScript vergleichen

Kann jemand einen Vorschlag machen, wie man die Werte von zwei Daten größer als, kleiner als, und nicht in der Vergangenheit mit JavaScript? Die Werte werden aus Textfeldern stammen.

20 Stimmen

Wenn es um DateTime und Manipulation in JS geht, suche ich nicht weiter als momentjs :)

101 Stimmen

Keine Notwendigkeit, Momentjs zu verwenden, um 2 Daten zu vergleichen. Verwenden Sie einfach reines Javascript's Date Objekt. Prüfen Sie die Hauptantwort für weitere Details.

0 Stimmen

Sie können die folgende Antwort lesen: stackoverflow.com/questions/4812152/ Prüfen Sie getDateDifference und getDifferenceInDays, ob es helfen kann.

1voto

yoniLavi Punkte 2397

Eine andere Möglichkeit, zwei Daten zu vergleichen, ist die Verwendung der toISOString() Methode. Dies ist besonders nützlich beim Vergleich mit einem festen Datum, das in einer Zeichenkette gespeichert ist, da Sie so die Erstellung eines kurzlebigen Objekts vermeiden können. Aufgrund des Formats ISO 8601 können Sie diese Zeichenketten lexikografisch vergleichen (zumindest, wenn Sie dieselbe Zeitzone verwenden).

Ich sage nicht unbedingt, dass es besser ist als die Verwendung von Zeitobjekten oder Zeitstempeln, sondern biete dies nur als weitere Option an. Es könnte Randfälle, wenn dies fehlschlagen könnte, aber ich habe nicht auf sie noch gestolpert :)

1voto

Brijesh Punkte 99

Das habe ich bei einem meiner Projekte gemacht,

function CompareDate(tform){
     var startDate = new Date(document.getElementById("START_DATE").value.substring(0,10));
     var endDate = new Date(document.getElementById("END_DATE").value.substring(0,10));

     if(tform.START_DATE.value!=""){
         var estStartDate = tform.START_DATE.value;
         //format for Oracle
         tform.START_DATE.value = estStartDate + " 00:00:00";
     }

     if(tform.END_DATE.value!=""){
         var estEndDate = tform.END_DATE.value;
         //format for Oracle
         tform.END_DATE.value = estEndDate + " 00:00:00";
     }

     if(endDate <= startDate){
         alert("End date cannot be smaller than or equal to Start date, please review you selection.");
         tform.START_DATE.value = document.getElementById("START_DATE").value.substring(0,10);
         tform.END_DATE.value = document.getElementById("END_DATE").value.substring(0,10);
         return false;
     }
}

dies im Formular "onsubmit" aufrufen. Ich hoffe, das hilft.

1voto

user1931504 Punkte 11
var curDate=new Date();
var startDate=document.forms[0].m_strStartDate;

var endDate=document.forms[0].m_strEndDate;
var startDateVal=startDate.value.split('-');
var endDateVal=endDate.value.split('-');
var firstDate=new Date();
firstDate.setFullYear(startDateVal[2], (startDateVal[1] - 1), startDateVal[0]);

var secondDate=new Date();
secondDate.setFullYear(endDateVal[2], (endDateVal[1] - 1), endDateVal[0]);
if(firstDate > curDate) {
    alert("Start date cannot be greater than current date!");
    return false;
}
if (firstDate > secondDate) {
    alert("Start date cannot be greater!");
    return false;
}

1voto

Jeeva Punkte 92
        from_date ='10-07-2012';
        to_date = '05-05-2012';
        var fromdate = from_date.split('-');
        from_date = new Date();
        from_date.setFullYear(fromdate[2],fromdate[1]-1,fromdate[0]);
        var todate = to_date.split('-');
        to_date = new Date();
        to_date.setFullYear(todate[2],todate[1]-1,todate[0]);
        if (from_date > to_date ) 
        {
            alert("Invalid Date Range!\nStart Date cannot be after End Date!")

            return false;
        }

Verwenden Sie diesen Code, um das Datum mit Javascript zu vergleichen.

Danke D.Jeeva

0 Stimmen

Ich denke, das ist eine gute Antwort, denn wir haben das Format "tt/mm/jj", und wir müssen das tun, um beide Daten zu vergleichen. Ich weiß nicht, ob es die beste Antwort ist, aber sie ist ausreichend. Vielen Dank für Ihren Beitrag.

1voto

William Hou Punkte 683

Alle oben genannten Antworten haben nur eines gelöst: zwei Daten zu vergleichen.

Sie scheinen in der Tat die Antworten auf die Frage zu sein, aber es fehlt ein großer Teil:

Was ist, wenn ich überprüfen möchte, ob eine Person das 18. Lebensjahr vollendet hat?

Leider ist KEINE der oben genannten Antworten in der Lage, diese Frage zu beantworten.

Die aktuelle Uhrzeit (etwa zu dem Zeitpunkt, an dem ich diese Zeilen schreibe) ist zum Beispiel Fri Jan 31 2020 10:41:04 GMT-0600 (Central Standard Time), während ein Kunde sein Geburtsdatum als "01/31/2002" eingibt.

Wenn wir die "365 Tage/Jahr" das ist "31536000000" Millisekunden, würden wir das folgende Ergebnis erhalten:

       let currentTime = new Date();
       let customerTime = new Date(2002, 1, 31);
       let age = (currentTime.getTime() - customerTime.getTime()) / 31536000000
       console.log("age: ", age);

mit dem folgenden Ausdruck:

       age: 17.92724710838407

Aber RECHTLICH ist dieser Kunde bereits 18 Jahre alt. Selbst wenn er "30.01.2002" eingibt, wäre das Ergebnis immer noch

       age: 17.930039743467784

was weniger als 18 ist. Das System würde den Fehler "minderjährig" melden.

Und so würde es weitergehen für "29.01.2002", "28.01.2002", "27.01.2002" ... "01/05/2002", BIS "01/04/2002".

Ein solches System würde alle Kunden, die vor 18 Jahren, 0 Tagen und 18 Jahren, 26 Tagen geboren wurden, einfach umbringen, weil sie rechtlich gesehen 18 Jahre alt sind, während das System "minderjährig" anzeigt.

Im Folgenden finden Sie eine Antwort auf eine solche Frage:

invalidBirthDate: 'Invalid date. YEAR cannot be before 1900.',
invalidAge: 'Invalid age. AGE cannot be less than 18.',

public static birthDateValidator(control: any): any {
    const val = control.value;
    if (val != null) {
        const slashSplit = val.split('-');
        if (slashSplit.length === 3) {
            const customerYear = parseInt(slashSplit[0], 10);
            const customerMonth = parseInt(slashSplit[1], 10);
            const customerDate = parseInt(slashSplit[2], 10);
            if (customerYear < 1900) {
                return { invalidBirthDate: true };
            } else {
                const currentTime = new Date();
                const currentYear = currentTime.getFullYear();
                const currentMonth = currentTime.getMonth() + 1;
                const currentDate = currentTime.getDate();
                if (currentYear - customerYear < 18) {
                    return { invalidAge: true };
                } else if (
                    currentYear - customerYear === 18 &&
                    currentMonth - customerMonth < 0) {
                    return { invalidAge: true };
                } else if (
                    currentYear - customerYear === 18 &&
                    currentMonth - customerMonth === 0 &&
                    currentDate - customerDate < 0) {
                    return { invalidAge: true };
                } else {
                    return null;
                }
            }
        }
    }
}

1 Stimmen

Wenn Sie eine neue Frage stellen: "Wie kann man in JS prüfen, ob das Datum mindestens X Jahre zurückliegt", wäre dies eine gute Antwort. Ich vermute, es kann durch Berechnung vereinfacht werden, was birthday+X entire years ist (Sie können Jahre zu den JS-Daten hinzufügen), und vergleichen Sie dann mit >= mit einer new Date()

0 Stimmen

Natürlich könnte es bessere Antworten geben. Meine Antwort sollte nur den PUNKT aufzeigen. Sie ist vielleicht nicht die beste Antwort. Es wäre toll, wenn du sie vereinfachen könntest!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X