CheckDatum – Datumseingabe auf Gültigkeit überprüfen
Bei Datumseingabe durch den Nutzer ist es nützlich eine Funktion an der Hand zu haben mit der geprüft werden kann, ob ein gültiges Datum angegeben wurde. Zudem soll ggf. geprüft werden, ob neben den Datum auch eine Uhrzeit eingegeben wurde.
Die VBScript-Funktionen CDate bzw. IsDate alleine bringen hierfür wenig wie folgendes Beispiel zeigt.
Dim i : i = "25.02.2005"
Dim j : j = "32.02.2005"
Dim k : k = "25.02.2005 07:00"
Dim l
l = CDate(i) ' l: 25.02.2005
l = CDate(j) ' Fehler: Typen unverträglich
l = CDate(k) ' l: 25.02.2005 07:00:00
l = IsDate(i) ' l: Wahr
l = IsDate(j) ' l: Falsch
l = IsDate(k) ' l: Wahr
In der nachfolgend aufgeführten Funktion CheckDatum(sDatum, sZeit) werden die beiden Funktionen genutzt um ein String sDatum auf eine gültige Datumsangabe zu prüfen. Zudem wird über den Parameter sZeit festgelegt, ob nur ein Datum (ohne Zeitangabe) angegeben werden kann oder ob eine zusätzliche Zeitangabe erforderlich oder optional ist. Zusätzlich prüft die Funktion, ob Tag und Monat sowie ggf. Stunde und Minute mit zwei Ziffern angegeben wird, d.h. ggf. mit führender Null. Die Jahreszahl muss vierstellig angegeben werden.
Zu guter Letzt prüft die Funktion noch, ob das Datum aus dem Zeitraum 01.01.1900 bis 31.12.2099 stammt (Zeile 43 - 45). Nur wenn dies der Fall ist, wird das Datum als gültig angesehen.
' sDatum - der zu prüfende String
' sZeit - Art der Prüfung:
' 0: nur Datum (ohne Zeit)
' 1: Datum mit Zeit
' 2: Datum mit oder ohne Zeitangabe
Function CheckDatum(sDatum, sZeit)
Dim sYY, i
CheckDatum = ""
If (sZeit < 0 OR sZeit > 2) Then
sZeit = 0
End If
' auf gültige Stringlänge prüfen und ggf. prüfen ob mit oder ohne Zeitangabe
If (sZeit = 0 AND Len(sDatum) <> 10) Then
Exit Function
ElseIf (sZeit = 1 AND Len(sDatum) <> 16) Then
Exit Function
ElseIf (sZeit = 2) Then
If (Len(sDatum) = 10) Then
' nur Datum
sZeit = 0
ElseIf (Len(sDatum) = 16) Then
' Datum + Zeit
sZeit = 1
Else
Exit Function
End If
End If
Set c__regEx = New RegExp ' Objekt "regulärer Ausdruck" erzeugen
If (sZeit = 0) Then
c__regEx.Pattern = "^[0-9]{2}\.[0-9]{2}\.[0-9]{4}$"
Else
c__regEx.Pattern = "^[0-9]{2}\.[0-9]{2}\.[0-9]{4} [0-9]{2}:[0-9]{2}$"
End If
c__regEx.IgnoreCase = False ' case sensitivity ist nicht erforderlich
c__retVal = c__regEx.Test(sDatum)
If c__retVal <> True Then
Exit Function
End If
' prinzipiell gültiger Zahlenwert für das Jahr?
i = CStr(CInt(sYY))
If (sYY <> i OR sYY < 1900 OR sYY > 2100) Then
Exit Function
End If
If (IsDate(sDatum)) Then
CheckDatum = CDate(sDatum)
Else
Exit Function
End If
End Function
Prüft man die drei Datumsangaben aus obigem Beispiel mit dieser Funktion, so erhält man folgende Resultate – ohne Fehlermeldung:
Dim i : i = "25.02.2005"
Dim j : j = "32.02.2005"
Dim k : k = "25.02.2005 07:00"
Dim l
l = CheckDatum(i, 0) ' l: 25.02.2005
l = CheckDatum(i, 1) ' l:
l = CheckDatum(i, 2) ' l: 25.02.2005
l = CheckDatum(j, 0) ' l:
l = CheckDatum(j, 1) ' l:
l = CheckDatum(j, 2) ' l:
l = CheckDatum(k, 0) ' l:
l = CheckDatum(k, 1) ' l: 25.02.2005 07:00:00
l = CheckDatum(k, 2) ' l: 25.02.2005 07:00:00
Es muss also nur das Ergebnis der Funktion auf einen leeren String prüfen. Liegt ein leerer String vor, so wurde kein gültiges Datum eingegeben.