Gut zu wissen, aber - dein Link zeigt nur alle normalen Funktionen und nichts zu der DateTime Klasse? Oder bin ich nur gerade blind?![]()
Hallo Dynamiker,
sehr häufig hat man es in PHP mit Ausgaben, Berechnungen und Vergleichen von Datum-Werten zu tun. Das kann mitunter schon recht tricky sein und selbst so eine simple Sache wie ein Datum im amerikanischen Format (wie es z.B. MySQL benutzt) in ein deutsches Format umwandeln lässt einem graue Haare wachsen.
Seit Version 5 bringt PHP eine relativ komfortable Klasse mit sich, die einem zumindest einfache Dinge im Umgang mit Datum erleichtern. Die Klasse in PHP 5 nennt sich DateTime und ich möchte Euch hier mal 2 einfache Anwendungsbeispiele zeigen.
Amerikanisches Datum in deutsches Datum umwandeln.
Der erste Parameter ist Pflicht und es wird ein Datum erwartet. Das muß nicht zwangsläufig in diesem Format vorliegen, dazu aber gleich mehr. Der 2. Parameter ist optional und legt fest welcher Zeitzone das Datum angehört. Hier kann man pauschal "CET" angeben um das Datum der Central European Time zuzuordnen. Ebenso könnte man auch explizit eine deutsche Zeitzone angeben, z.B. "Europe/Berlin" oder amerikanisch "America/New_York". Die Zeitzone ist etwa wichtig um Zeitumstellungen oder Zeitverschiebungen bei Berechnungen zu berücksichtigen. Lässt man den 2. Parameter leer, wird versucht die Zeitzone vom Server auszulesen. Das wird in den meisten Fällen ausreichend sein, sofern man nicht vorhat "globale" Berechnungen durchzuführen.PHP-Code:$datum = new DateTime( "2007-08-11 14:32:18", new DateTimeZone( 'CET' ) );
echo $datum->format( "d.m.Y H:i:s" ); // Gibt aus: 11.08.2007 14:32:18
echo $datum->format( "d.m.Y" ); // Gibt aus: 11.08.2007
Wie hier zu sehen ist geben wir ein Datum an, wie es z.B. von einem DateTime Feld in einer MySQL DB kommen könnte.
In Zeile 2 geben wir das Datum durch die Methode format() in der gewünschten (deutschen) Formatierung aus.
Was erwartet DateTime?
Wenn man ein neues DateTime Objekt erzeugt, wird ein Parameter erwartet der identisch mit der Funktion strtotime ist. Man gibt also das Datum als String an, wobei man hier mehr oder weniger freie Hand hat. Um das Rad nicht neu erfinden zu müssen, schaut Ihr am besten bei der entsprechenden Funktion die Beispiele an um zu verstehen wie man diese Datumsangabe benutzt.
Zwei Termine vergleichen
Wir erzeugen ein neues DateTime Objekt ($datum_start) mit dem Datum von Heute. Dieses Objekt klonen wir ($datum_ende) und benutzen die Methode modify() um dem geklonten Objekt 7 Tage dazu zu addieren. Würden wir z.B. 7 Tage abziehen wollen, gibt man z.B. "7 days ago" an.PHP-Code:$datum_start = new DateTime( 'today' );
$datum_ende = clone $datum_start;
$datum_ende->modify( '7 days' );
if ($datum_ende->format( "U" ) > $datum_start->format( "U" ))
{
echo "Datum liegt in der Zukunft!";
}
else
{
echo "Datum ist Vergangenheit!";
}
Anschliessend vergleichen wir die 2 Termine in der IF-Anweisung, indem wir das Datum mithilfe des Schalter "U" in einen Timestamp umwandeln.
So lässt sich sehr einfach errechnen, ob ein gewisses Datum z.B. im Bereich einer Woche liegt.
Weiterführende Informationen zu den neuen Funktionen findet Ihr wie üblich in der Dokumentation: DateTime
Geändert von phpBuddy (26.03.2008 um 21:35 Uhr)
#.Viele Grüße - Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
PHP Tutorials und kostenlose Scripts gibt's bei phpBuddy.eu
Follow phpBuddy on Twitter
LTFB - anfängerfreundliche Tutorials
.
Gut zu wissen, aber - dein Link zeigt nur alle normalen Funktionen und nichts zu der DateTime Klasse? Oder bin ich nur gerade blind?![]()
“My software never has bugs. It just develops random features ...”
» DevShack - die Website des freien Webentwicklers Boris
Danke Andreas, sehr nützlich das ist!
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
Boris, das ist noch nicht ins Manual eingepflegt, scheint so.
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
Hallo Boris,
Du musst auf die einzelnen Funktionen klicken, wie etwa date_create. Ist dort ein OOP Zugriff möglich, zeigt es das in Form vonan - in diesem Fall offensichtlich der Konstruktor, der dem new DateTime() entspricht.DateTime DateTime::__construct ([ string $time [, DateTimeZone $timezone ]] )
Anderes Beispiel date_date_set():entspricht $objekt->setDate( 2008, 12, 24 ); usw.void DateTime::setDate ( int $year , int $month , int $day )
Der Scope Operator (::) deutet auf OO-Zugriff hin.
Die Dokumentation ist nicht immer so logisch aufgebaut wie man es gerne hätte, aber meistens kommt man doch ganz gut damit zurecht.
EDITDu kannst auch so feststellen welche Methoden die Klasse hat:
PHP-Code:echo "<pre>" .print_r( get_class_methods( "DateTime" ), true ). "</pre>";
Geändert von phpBuddy (26.03.2008 um 17:25 Uhr)
#.Viele Grüße - Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
PHP Tutorials und kostenlose Scripts gibt's bei phpBuddy.eu
Follow phpBuddy on Twitter
LTFB - anfängerfreundliche Tutorials
.
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)