phpbar.de logo

Mailinglisten-Archive

[php] Datum mit ereg erkennen

[php] Datum mit ereg erkennen

Alex Emken php at emken.com
Mon Aug 27 10:38:35 CEST 2007


Andre Lampe wrote:
> Ich möchte Datumseingaben in drei Varianten ermöglichen. Wenn die 
> "deutschen" Datumsformate DD.MM.YYYY oder DD.MM.YY eingegeben werden, 
> soll das Datum in YYYY-MM-DD umgeschrieben werden.
> 
[Code]
> 
> Es wird bei einem englischen Datumsformat aber "Datum Neu: 2008-7-20" 
> ausgegeben. Das Datum scheint bei der zweiten ereg-Abfrage erkannt zu 
> werden und wird dann falsch formatiert.
> 
> Was mache ich falsch?

Hallo Andre.

Der Punkt ist ein Platzhalter für ein beliebiges Zeichen. Da im Ausdruck 
weder Begrenzer für Anfang und Ende vorhanden sind, wird natürlich nicht 
das Gewünschte gefunden. Den Punkt musst du mit einem Backslash entwerten.

Versuchs mal hiermit:

$date = "27.08.07";

if (preg_match("=^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4})$=", $date, 
$regs)) {
     $db_date = $regs[3].'-'.$regs[2].'-'.$regs[1];
}
elseif (preg_match("=^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{2})$=", $date, 
$regs)) {
     $db_date = '20'.$regs[3].'-'.$regs[2].'-'.$regs[1];
}
else {
     $db_date = $date;
}
		
echo "Datum Neu: ".$db_date;


Wobei das Datum dann natürlich nicht valide sein muss. Das solltest Du 
noch mit checkdate[1] o.ä. überprüfen.

Gruß
Alex

[1] http://www.php.net/manual/en/function.checkdate.php

php::bar PHP Wiki   -   Listenarchive