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.

VBScript:
  1. Dim i : i = "25.02.2005"
  2. Dim j : j = "32.02.2005"
  3. Dim k : k = "25.02.2005 07:00"
  4. Dim l
  5.  
  6. l = CDate(i) ' l: 25.02.2005
  7. l = CDate(j) ' Fehler: Typen unverträglich
  8. l = CDate(k) ' l: 25.02.2005 07:00:00
  9.  
  10. l = IsDate(i) ' l: Wahr
  11. l = IsDate(j) ' l: Falsch
  12. 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.

VBScript:
  1. ' sDatum - der zu prüfende String
  2. ' sZeit - Art der Prüfung:
  3. ' 0: nur Datum (ohne Zeit)
  4. ' 1: Datum mit Zeit
  5. ' 2: Datum mit oder ohne Zeitangabe
  6. Function CheckDatum(sDatum, sZeit)
  7.  Dim sYY, i
  8.  CheckDatum = ""
  9.  
  10.  If (sZeit < 0 OR sZeit > 2) Then
  11.   sZeit = 0
  12.  End If
  13.  
  14.  ' auf gültige Stringlänge prüfen und ggf. prüfen ob mit oder ohne Zeitangabe
  15.  If (sZeit = 0 AND Len(sDatum) <> 10) Then
  16.   Exit Function
  17.  ElseIf (sZeit = 1 AND Len(sDatum) <> 16) Then
  18.   Exit Function
  19.  ElseIf (sZeit = 2) Then
  20.   If (Len(sDatum) = 10) Then
  21.    ' nur Datum
  22.    sZeit = 0
  23.   ElseIf (Len(sDatum) = 16) Then
  24.    ' Datum + Zeit
  25.    sZeit = 1
  26.   Else
  27.    Exit Function
  28.   End If
  29.  End If
  30.  
  31.  Set c__regEx = New RegExp ' Objekt "regulärer Ausdruck" erzeugen
  32.  If (sZeit = 0) Then
  33.   c__regEx.Pattern = "^[0-9]{2}\.[0-9]{2}\.[0-9]{4}$"
  34.  Else
  35.   c__regEx.Pattern = "^[0-9]{2}\.[0-9]{2}\.[0-9]{4} [0-9]{2}:[0-9]{2}$"
  36.  End If
  37.  c__regEx.IgnoreCase = False ' case sensitivity ist nicht erforderlich
  38.  c__retVal = c__regEx.Test(sDatum)
  39.  If c__retVal <> True Then
  40.   Exit Function
  41.  End If
  42.  
  43.  ' prinzipiell gültiger Zahlenwert für das Jahr?
  44.  i = CStr(CInt(sYY))
  45.  If (sYY <> i OR sYY < 1900 OR sYY > 2100) Then
  46.   Exit Function
  47.  End If
  48.  
  49.  If (IsDate(sDatum)) Then
  50.   CheckDatum = CDate(sDatum)
  51.  Else
  52.   Exit Function
  53.  End If
  54. End Function

Prüft man die drei Datumsangaben aus obigem Beispiel mit dieser Funktion, so erhält man folgende Resultate – ohne Fehlermeldung:

VBScript:
  1. Dim i : i = "25.02.2005"
  2. Dim j : j = "32.02.2005"
  3. Dim k : k = "25.02.2005 07:00"
  4. Dim l
  5.  
  6. l = CheckDatum(i, 0) ' l: 25.02.2005
  7. l = CheckDatum(i, 1) ' l:
  8. l = CheckDatum(i, 2) ' l: 25.02.2005
  9.  
  10. l = CheckDatum(j, 0) ' l:
  11. l = CheckDatum(j, 1) ' l:
  12. l = CheckDatum(j, 2) ' l:
  13.  
  14. l = CheckDatum(k, 0) ' l:
  15. l = CheckDatum(k, 1) ' l: 25.02.2005 07:00:00
  16. 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.


Kommentare anzeigenSeite kommentieren
Laden...Kommentare werden geladen.
Laden...Formular zum Schreiben eines Kommentars wird geladen.


 

Google+
Facebook
Pin it
Twitter
Blogger
Google Mail
E-Mail schreiben