Datumsumwandlungen Formular - mysql und zurück

Hi,
habe zwei kleine Funktionen zur Datumsumwandlung aus einem Formular
für die =DCbergabe 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.
..=2E.oder renne ich offene Türen ein und PHP bietet dafür
Standrdfunktionen, die ich nicht kenne? ... dann war's halt eine
interessante =DCbung.

Meine Funktionen:

<?php

//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
Herbert Fidesser [ So, 30 Juli 2006 10:54 ] [ ID #1410658 ]

Re: Datumsumwandlungen Formular - mysql und zurück

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
Frank Schenk [ So, 30 Juli 2006 23:38 ] [ ID #1410660 ]

Re: Datumsumwandlungen Formular - mysql und zurück

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
dev-null-use-reply-ad [ Mo, 31 Juli 2006 08:43 ] [ ID #1411901 ]

Re: Datumsumwandlungen Formular - mysql und zurück

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
Johannes Vogel [ Mo, 31 Juli 2006 12:36 ] [ ID #1411902 ]
PHP » de.comp.lang.php.datenbanken » Datumsumwandlungen Formular - mysql und zurück

Vorheriges Thema: Eine Datumssuchfunktion
Nächstes Thema: [FAQ/2006-07-30] Loesungen fuer deine PHP-Probleme