Datumsumwandlungen Formular - mysql und zurück

Datumsumwandlungen Formular - mysql und zurück

am 30.07.2006 10:54:26 von Herbert Fidesser

Hi,
habe zwei kleine Funktionen zur Datumsumwandlung aus einem Formular
für die Übergabe an Mysql und umgehehrt geschrieben. Es werden nicht
alle Möglichkeiten abgefangen, aber für meine Zwecke reicht es.
Wenn jamand Verbesserungsvorschläge hat, oder auf Fehler hinweisen
will, bin ikch dankbar.
...oder renne ich offene Türen ein und PHP bietet dafür
Standrdfunktionen, die ich nicht kenne? ... dann war's halt eine
interessante Übung.

Meine Funktionen:


//Datumsstring in mysql-Datum umwandeln (yyyy-mm-dd)
function mysql_datum($datstr) {
$dmax =3D array(31,28,31,30,31,30,31,31,30,31,30,31);
$chk =3D str_replace("/", "-", $datstr);
$chk =3D str_replace(".", "-", $chk);
$chk =3D explode("-", $chk);
$cnt =3D 0;
foreach ($chk as $key=3D>$elem) {
$cnt =3D $cnt + 1 ;
${"chk_$key"} =3D $elem;
}
switch ($cnt) { //Anzahl der Elemente prüfen
case 0: //kein Datum
case 1: //kein Datum
$rstr=3D"";
break;
case 2: //Datum im lfd.Jahr ohne Jahresangabe
// Jahr anfügen
$chk_2 =3D date("Y");
case 3: //Normales Datum
//2. Element prüfen (immer Monat)
if ($chk_1 > 12) {
$rstr=3D"";
break;
} else {
$mo =3D $chk_1;
}
//1. u. 3. Element prüfen mögl: J, T
if ($chk_0 > $dmax[$mo - 1]) {
$jr =3D $chk_0;
$tg =3D $chk_2;
} else {
$tg =3D $chk_0;
$jr =3D $chk_2;
}
$rstr =3D "$jr-$mo-$tg";
}

return $rstr;
}

//mysql-Datum formatiert ausgeben
function format_datum($mydat, $fmt) {
$chk =3D explode("-", $mydat);
foreach ($chk as $key=3D>$elem) {
${"chk_$key"} =3D $elem;
}
return date($fmt, mktime(0,0,0,$chk_2, $chk_1, $chk_0));
}

?>

Gruß
Herbert

Re: Datumsumwandlungen Formular - mysql und zurück

am 30.07.2006 23:38:22 von Frank Schenk

Herbert Fidesser schrieb:
> Hi,
> habe zwei kleine Funktionen zur Datumsumwandlung aus einem Formular
> für die Übergabe an Mysql und umgehehrt geschrieben. Es werden nicht
> alle Möglichkeiten abgefangen, aber für meine Zwecke reicht es.
> Wenn jamand Verbesserungsvorschläge hat, oder auf Fehler hinweisen
> will, bin ikch dankbar.


Naja, du hast es dir arg kompliziert gemacht. Datum umwandeln in jahr,
monat, tag -> mktime() -> date() [1]

Und MySQL selbst kann dir ein Datum in jedes beliebige Format umwandeln
-> date_format()[2]

Siehe auch FAQ [3]

gruß, Frank

P.S.: Es gibt Millionen von Codeschnipseln zu PHP, was wirklich neues
ist eher selten.


[1] Siehe http://www.php.net
[2] Siehe http://dev.mysql.com/doc
[3] http://www.php-faq.de

Re: Datumsumwandlungen Formular - mysql und zurück

am 31.07.2006 08:43:35 von dev-null-use-reply-adress

Herbert Fidesser schrieb:
> habe zwei kleine Funktionen zur Datumsumwandlung aus einem Formular
> für die Übergabe an Mysql und umgehehrt geschrieben. Es werden nicht
> alle Möglichkeiten abgefangen, aber für meine Zwecke reicht es.
> Wenn jamand Verbesserungsvorschläge hat, oder auf Fehler hinweisen
> will, bin ikch dankbar.

Für die Überprüfung auf gültiges Datum:
http://de.php.net/checkdate


Gruß
JPM

Re: Datumsumwandlungen Formular - mysql und zurück

am 31.07.2006 12:36:34 von Johannes Vogel

Hi Herbert

Herbert Fidesser wrote:
> habe zwei kleine Funktionen zur Datumsumwandlung aus einem Formular
> für die Übergabe an Mysql und umgehehrt geschrieben. Es werden nicht
> alle Möglichkeiten abgefangen, aber für meine Zwecke reicht es.
> Wenn jamand Verbesserungsvorschläge hat, oder auf Fehler hinweisen
> will, bin ikch dankbar.
> ...oder renne ich offene Türen ein und PHP bietet dafür
> Standrdfunktionen, die ich nicht kenne? ... dann war's halt eine
> interessante Übung.

Ziemlich aufwendig find ich deine Funktionen schon. Bei mir heisst das
schlichtweg flipDate() und sieht wie folgt aus:

function flipDate ($date) {
if (empty($date)) return;
list($date, $time) = split(' ', $date);
if (strstr($date,'-')) {
list($y,$m,$d) = split('-',$date); $date = "$d.$m.$y";
} else {
list($d,$m,$y) = preg_split('#\D#',$date); $date = "$y-$m-$d";
}
return $date.((empty($time))?null:' '.$time);
}

Die Überprüfung, ob's wirklich ein gültiges Datum ist, könntest du vor
dem return per 'if (checkdate($m,$d,$y)) {} else {}' einfügen. Bei mir
passiert das immer bereits im Vornherein.

HTH, Johannes