Neuigkeiten:

still alive...

Hauptmenü

Datumsformat prüfen

Begonnen von maui muc, 04. März 2009, 13:17:10

Vorheriges Thema - Nächstes Thema

maui muc

Hallo zusammen,
könnte ihr mir einen Tipp geben wie ich am besten einen Datums-String auf Konsistenz prüfe?
Erste Ansätze habe ich schon:
$date=\"23.02.2003\";
preg_match(\"/^[0-3][0-9].[0-1][0-9].[1-2][0-9][0-9][0-9]$/\", $date);

Dieser Code prüft leider nur das Format. Ich würde aber gerne auf Konsistenz prüfen und nur Datums ab 1900 bis heute zulassen.  
Besten Dank für die Hilfe
Stefan

k00ni

Hi,
zerlege das doch in 3 Variablen:
- Tag
- Monat
- Jahr
und speise dann damit die Funktion mktime. Kommt eine Zahl größer 0 raus, dann ist das Ding syntaktisch korrekt. Weiterhin kannst du dann auch gleich durch eine if-Abfrage Daten kleiner 1900 ausschließen.
 
Grüße

maui muc

Was haltet ihr davon?
$date=explode(\".\",$date,3);
if ($date[0]>31 or $date[0]12 or $date[1]2007) $error=2;
$date=$date[2].\"-\".$date[1].\"-\".$date[0];

 Ich bin kein Profi auf dem Gebiet, darum frage ich lieber mal nach.
Grauß
Stefan

k00ni

Dabei hast nur das Problem, dass du Schaltjahre und das Februarproblem (28 Tage) nicht beachtest.
 
Grüße

maui muc

Ja, das ist mir schon bewusst und gefällt mir auch nicht sonderlich.
Ich habe mich auch schon etwas mit der Funktion mktime() gespielt aber irgendwie mach die gar nicht was ich will. Zum Beispiel akzeptiert mktime ohne weiteres das Datum 33.13.1980.
mktime(0,0,0,13,33,1980) -> 349916400 und das wiederum entspricht dem 2.2.1981
Eigentlich würde ich von der Funktion in diesem Fall einen Fehler erwarten.

ravetracer

Das Thema ist zwar schon etwas älter, aber wieso macht ihr euch das Leben denn so schwer?
 


$datum = \"23.02.2003\";
$datum_ts = strtotime($datum);
echo checkdate(date(\"m\",$datum_ts),date(\"d\",$datum_ts),date(\"Y\",$datum_ts));

 
 
checkdate() gibt TRUE oder FALSE zurück.
Gruß,
Christian

Powie


k00ni

Hi,
es schreibt aber jemand in den http://www.php.net/manual/de/function.checkdate.php#92190\" rel=\"external nofollow\">Kommentaren in der php.net-Doku das man das nicht zum Validieren nutzen kann. Wiederum posten Leute eigene Funktionen zur Validierung. Kann man daher checkdate nur eingeschränkt nutzen?
 
Grüße

all your base are belong to us / Discord