Mailinglisten-Archive |
>Ich kaeme z.B. nie auf die Idee, einen User ein Datum eingeben zu lassen, da kommt nur Murks raus. Warum nicht, dafür schreibt man sich eine nette kleine Funktion und evoila, der User sollte nur irgendein genormtes Format angeben, welches, das erkennt PHP von selbst. Den geprüften bzw. korrigierten Wert zeigt man dem User nochmals an damit notfalls er derjenige ist welcher den "Fehler" zu verantworten hat - und fertig !!! Wir verarbeiten bei uns Adressen und prüfen alles was nicht "Niet und Nagel" fest ist. Bei ca. 15.000 neuen Daten täglich wäre eine Sichtprüfung ohnehin "für'n Arsch"... Anbei beschriebene Funktion (reicht zumindest für die gängigen Formate). Notfalls könnte man auch das Eingangsformat noch einbauen und die Ausgabe läßt sich natürlich auch noch nach Herzenzlust bearbeiten... Viel Spaß damit und jetzt mach ich wirklich Feierabend! # Prüft ein Datum und gibt es im gewünschten Format zurück function get_date($datum,$out,$nocheck) { if (!$out) $out = "Y-m-d"; $datum = ereg_replace("[^0-9\.-]","",$datum); if ($datum) { # TT.MM.JJJJ if (preg_match("=\.=",$datum)) $tmp = split("\.",$datum); # JJJJ-MM-TT else if (preg_match("=-=",$datum)) $tmp = array_reverse(split("-",$datum)); # TTMMJJJJ else { $tmp[0] = substr($datum,0,2); $tmp[1] = substr($datum,2,2); $tmp[2] = substr($datum,4,4); } } if ($tmp) { # geb. Datum 2 Stellig if (strlen($tmp[2]) < 3) { if ($tmp[2] > date("y")) $tmp[2] = '19'.set($tmp[2],n,2); else $tmp[2] = '20'.set($tmp[2],n,2); } $tmp[0] = set($tmp[0],n,2); $tmp[1] = set($tmp[1],n,2); $tmp[2] = set($tmp[2],n,4); # Tag ungültig $max = date("t", mktime(0,0,0,$tmp[1])); if ($tmp[0] > $max) $tmp[0] = $max; # Datum in der Zukunft => -100 Jahre if (!$nocheck && date("Ymd") < $tmp[2].$tmp[1].$tmp[0]) $tmp[2] -= 100; # Rückgabe wenn Datum korrekt oder keine Prüfung gewünscht if ($nocheck || checkdate($tmp[1],$tmp[0],$tmp[2])) { $pattern = array("=d=","=m=","=Y=","=y="); $replace = array($tmp[0],$tmp[1],$tmp[2],substr($tmp[2],2,2)); return preg_replace($pattern,$replace,$out); } } } NACHTRAG: Wie ich auf den Schwachsinn mit Pattern und Replace kam weiß ich selbst nicht mehr, werf ich definitiv raus und ersetze es durch mktime() und date() ...
php::bar PHP Wiki - Listenarchive