Calocybe: 2 Datumsfelder vergleichen

Beitrag lesen

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