![]() |
Datumsüberprüfung |
|
| |
| E-Mail: | |
|---|---|
| Homepage-URL: |
Bei Fragen zu diesem Beitrag bitte den Autor des Beitrags kontaktieren!
Datumsangaben innerhalb von Formularen stellen eine erhebliche Fehlerquelle dar. Aus diesem Grund ist es immer wieder erforderlich, die Gültigkeit eines Datums zu überprüfen.
JavaScript stellt mit dem Date-Objekt ein komfortables Mittel zur Überprüfung der
Gültigkeit eines Datums zur Verfügung.
Ein neues gültiges Date-Objekt wird mittels new Date(Jahr,Monat,Tag) erzeugt.
Dabei ist es nicht unbedingt erforderlich, als Monat oder Tag einen gültigen Wert
zwischen 0 und 11 bzw. 1 und 31 anzugeben. Liegt die Angabe außerhalb des Gültigkeitsbereiches,
so "zählt" JavaScript einfach weiter.
Das bedeutet, dass, wenn z. B. mit new Date(2000,11,32) ein
neues Date-Objekt gebildet wird, als Datum der 01.01.2001 zurückgegeben wird.
Es ist nicht einmal erforderlich, zu kontrollieren, ob der Anwender
Buchstaben oder Sonderzeichen verwendet hat. Wird das Date-Objekt mit einem ungültigen
Wert gebildet, so wird im erzeugten Date-Objekt der Wert NaN gespeichert.
Werden Methoden wie z.B. getHours() auf ein Date-Objekt mit dem Wert NaN
angewandt, so geben auch diese Methoden NaN zurück.
Zur Kontrolle eines Datums genügt es demnach, einfach aus den eingegebenen Datumswerten ein neues Date-Objekt zu erzeugen und beide Datumswerte zu vergleichen. Stimmen diese überein, so ist das eingegebene Datum richtig, sonst falsch.
Die Funktion gueltigesDatum() erhält als Übergabewert ein Datum in
der Form Tag.Monat.Jahr. Dieses Datum soll auf seine Gültigkeit hin überprüft werden.
Im Fehlerfall gibt die Funktion false (falsch) sonst true
(richtig) zurück.
<script type="text/javascript">
<!-- gueltig fuer Browser ab Version 4, Internet Explorer ab Version 5
function gueltigesDatum (datum)
{
//(Schritt 1) Fehlerbehandlung
if (!datum) return false;
datum=datum.toString();
//(Schritt 2) Aufspaltung des Datums
datum=datum.split(".");
if (datum.length!=3) return false;
//(Schritt 3) Entfernung der fuehrenden Nullen und Anpassung des Monats
datum[0]=parseInt(datum[0],10);
datum[1]=parseInt(datum[1],10)-1;
//(Schritt 4) Behandlung Jahr nur zweistellig
if (datum[2].length==2) datum[2]="20"+datum[2];
//(Schritt 5) Erzeugung eines neuen Dateobjektes
var kontrolldatum=new Date(datum[2],datum[1],datum[0]);
//(Schritt 6) Vergleich, ob das eingegebene Datum gleich dem JS-Datum ist
if (kontrolldatum.getDate()==datum[0] && kontrolldatum.getMonth()==datum[1] && kontrolldatum.getFullYear()==datum[2])
return true; else return false;
}
/* Beispielaufrufe*/
alert(gueltigesDatum("29.02.2000"));
alert(gueltigesDatum("29.02.2001"));
//-->
</script>
Im ersten Schritt wird geprüft, ob überhaupt ein Wert übergeben wurde.
Dieses Vorgehen ist notwendig, da auf undefinierte Objekte die folgenden JavaScript-Methoden
nicht angewandt werden können. Da ein fehlender Datumswert kein gültiges Datum ist,
wird die Kontrollfunktion an dieser Stelle abgebrochen und gibt false zurück.
Anschließend wird der Wert des Parameters datum in einen String umgewandelt. Dies stellt sicher,
dass die Methode split() des Stringobjektes angewandt werden kann.
Im Schritt 2 wird das übergebene Datum mittels der Methode split()
in seine Bestandteile zerlegt. Trennzeichen ist in diesem Fall der Punkt.
Diese Methode bewirkt, dass in der Variablen Datum
ein Array gespeichert ist. Da ein dreiteiliges Datum erwartet wird,
muss das Array Datum aus genau drei Elementen bestehen. Sind weniger bzw. mehr Elemente
vorhanden, handelt es sich um ein ungültiges Datum und die Kontrollfunktion wird
abgebrochen und false zurückgegeben.
Im dritten Schritt werden eventuell vorhandene führende Nullen für den
Tag und den Monat entfernt.
Dieser Schritt sichert, dass in jedem Fall eine gültige vergleichbare Zahl entsteht.
Da in JavaScript die Zählung der Monate mit 0 statt mit 1 beginnt, wird der Wert des Monats um eins vermindert.
Im folgenden Schritt wird geprüft, ob es sich um eine zweistellige Jahresangabe handelt. Ist dieser Fall eingetreten, so wird diese in eine vierstellige Jahresangabe konvertiert. Aus der Jahresangabe "02" wird dadurch 2002.
Die bisherigen Arbeitsschritte dienten dazu, den Parameter datum zu überprüfen und
für die weitere Verarbeitung vorzubereiten. Daraus wird im fünften Schritt ein
Date-Objekt erzeugt und auf der Variablen kontrolldatum gespeichert.
Im letzten Schritt wird unter Verwendung der Methoden getDate()
(Monatstag), getMonth() (Monat) und getFullYear() (volles Jahr) geprüft,
ob das mit JavaScript erzeugte Datum mit dem Parameter datum übereinstimmt.
Tritt dieser Fall ein, so gibt die Funktion true sonst false zurück. Von diesem Rückgabewert können Sie dann die Weiterverarbeitung abhängig machen.
Die folgenden Stellen werden empfohlen, um das obige Beispiel besser zu verstehen, oder um weitere Möglichkeiten und Details zu erfahren.