Marcus: 2 Datumsfelder vergleichen

Hallo Brettgemeinde !

Ich habe ein Buchungsformular gestrickt, wo man zu einem das HinReisedatum und zu anderem Rückreisedatum eintragen muss.

Die Datumsfelder habe ich dreigeteil, wobei der aktuelle Monat und das Jahr automatisch eingetragen ist. Man muss nur noch den Tag eingeben. Wenn ich den Wert dann in die Datenbank schreibe füge ich die 3 Teil zu einem Datumwert zusammen.

Nun kann es durch ein Vertippen passieren das die Hinfahrt am 01.04.00 ist und die Rückfahrt am 23.03.00.

Ich möchte jetzt durch JavaScript die Felder überprüfen lassen und eine Fehlermeldung erscheinen lassen.

Hat jemand einen Tip wie das am besten funktioniert ?!

thx & cu

Marcus

  1. Halloe,
    wenn du in JS Datumwerte vergleichen moechtest, dann geht das am besten wenn du diese in ms seit 1970 umwandelst. Da du dann ganze Zahlen erhaelst, kannst du diese ganz simpel vergleichen. Mehr dazu findest du bei <../../tece.htm>

    schoene Gruesse
    Thomas Mell

  2. Hallo Marcus,

    wenn Du in Deiner Prüffunktion Jahr, Monat und Tag in dieser Reihenfolge mit jeweils einem Trennzeichen
    (z.B.: "-") konkatenierst und dann einfach abfragst, ob das Hinreisedatum kleiner als das Rückreisedatum ist,
    dann hast Du das Problem schon gelöst.

    Bis danndann

    Michael N.

  3. Hi!

    Die Datumsfelder habe ich dreigeteil, wobei der aktuelle Monat und das Jahr automatisch eingetragen ist. Man muss nur noch den Tag eingeben. Wenn ich den Wert dann in die Datenbank schreibe füge ich die 3 Teil zu einem Datumwert zusammen.

    Wie sieht dieser Wert aus? Wenn man Datums-/Zeitwerte effektiv weiterverarbeiten will, sollte man diese immer als Anzahl der Zeiteinheiten seit einem bestimmten Bezugspunkt speichern. Weit verbreitet ist z.B. Anzahl der Sekunden seit 01.01.1970. Das Date-Objekt von JavaScript arbeitet intern mit der Anzahl der Millisekunden seit eben diesem Tag (00:00:00 Uhr GMT).

    Ich rate Dir, ebenfalls solche Werte zu benutzen. Kalkulationen vereinfachen sich dadurch auf den Level simpler Additionen.

    Dazu musst Du Deine drei Werte erstmal in ein Date-Objekt bringen. Dieses bietet entgegenkommenderweise einen entsprechenden Konstruktor.

    var dt = new Date(year, month, sec);

    year bitte immer 4-stellig angeben, um Missverstaendnisse bezueglich des Jahrhunderts zu vermeiden. Die Werte von month bewegen sich im Bereich von 0-11, nicht 1-12 (ein laestiges Erbe). Du musst also erst 1 von den eingegebenen Werten abziehen.

    Bitte denke daran, dass die Werte, die Du aus Formularfeldern ausliest, Strings sind, keine Zahlen. Du musst sie erst mit etwas wie parseInt(document.form.inputfield.value, 10) in Zahlen umwandlen (die 10 nicht vergessen; siehe <../../sfarchiv/1999_2/t03219.htm> und <../../sfarchiv/1999_4/t08822.htm>).

    Nun kann es durch ein Vertippen passieren das die Hinfahrt am 01.04.00 ist und die Rückfahrt am 23.03.00.
    Ich möchte jetzt durch JavaScript die Felder überprüfen lassen und eine Fehlermeldung erscheinen lassen.

    Erzeuge zwei Date-Objekte nach obigem Muster. Die Methode getTime() gibt die Anzahl der Millisekunden zurueck. Dein Problem reduziert sich auf den Vergleich:

    if (dt1.getTime() > dt2.getTime()) {
            // Gegenmassnahmen einleiten
        }

    So lange, Calocybe