phpbar.de logo

Mailinglisten-Archive

[php] Datumstring anhand Format parsen

[php] Datumstring anhand Format parsen

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Die Okt 17 19:41:06 CEST 2006


Hi Ralf,

Am Dienstag, 17. Oktober 2006 19:13 schrieb Ralf Eggert:
> Ich habe einen String und ein Datumsformat und möchte den String
> anhand des Datumsformat "parsen", d.h. in seine Bestandteile
> zerlegen, um danach per checkdate() zu prüfen, ob es sich dabei um
> ein gültiges Datum handelt.
>
> Das Format soll frei angegeben werden können, solange es den
> möglichen Parametern von date() entspricht. Wobei es generell nur um
> Tage, Monate und Jahre gehen soll.

also wenn alles möglich sein soll, wirst Du so oder so Schwierigkeiten 
bekommen. 05-06-07 könnte dann der 7. Juni 2005, der 5. Juni 2007 oder 
6. Mai 2007 sein. Du wirst hauptsächlich das Problem haben, 
herauszubekommen, ob das Jahr die erste oder die letzte Angabe ist und 
ob von den übrigen beiden Angaben die erste der Tag oder der Monat oder 
umgekehrt ist.

> Beispiel 1:
> String: 17.10.2006
> Format: %d.%m.%Y
>
> Beispiel 2:
> String: 2006-10-17
> Format: %Y-%m-%d
>
> Beispiel 3:
> String: 17/10/2006
> Format: %d/%m/%Y

Wie sieht es mit den Separatoren (".", "-", "/") aus? Sind die auch 
beliebig? Oder willst Du nicht doch sinnvolle und erlaubte Formate 
definieren, die Dir die unzweideutige Verarbeitung der Datumsangaben 
ermöglichen?

> Für Beispiel 1 wäre dies eine mögliche Lösung:
> list($day, $month, $year) = sscanf($value, '%d.%d.%d');
>
> Für Beispiel 2 wäre dies eine mögliche Lösung:
> list($year, $month, $day) = sscanf($value, '%d-%d-%d');
>
> Und für Beispiel 3 wäre dies eine mögliche Lösung:
> list($day, $month, $year) = sscanf($value, '%d/%d/%d');

Wenn die möglichen Formate definiert und eindeutig identifizierbar 
wären, könntest Du pro Format den Separator und die Reihenfolge von 
Tag, Monat und Jahr in einem assoziativen Array hinterlegen und diese 
dann in der list(...) = sscanf(...)-Zeile einsetzen. Sollte hingegen 
alles beliebig sein, wirst Du im Zweifelsfall nicht mal als Mensch in 
der Lage sein, das Datum korrekt zu zerlegen. ;-)

Sollte ich was falsch verstanden haben, bitte ich Dich, Deine Frage zu 
konkretisieren. :-)


Viele Grüße
Lutz

php::bar PHP Wiki   -   Listenarchive