Die Daten-Typen von mysql finden hier keine Erwähnung. Im Zusammenspiel von PHP mit der Datenbank mysql sollte man aber auf jeden Fall die Thematik vorher nochmal vertiefen.
Inhalt:
- time
- mktime
- checkdate
- date
- microtime
- easter_days
- easter_date
- date_sunrise
- date_sunset
- setlocale
- strftime
time()
Das wohl wichtigste, um mit Daten (plural Datum) zu rechnen ist der UNIX-timestamp. Gezählt werden hierbei die Sekunden, die seit dem 01.01.1970 00:00h vergangen sind.
Der Vorteil dieses festen Bezuges liegt darin, dass man nun einen definierten integer-Wert hat, mit dem sich gut rechnen läßt. Doch dazu später mehr.
Der aktuelle Wert läßt sich mittels time() ausgeben:
<?php
echo time();
?> Selbstverständlich ist es möglich auch den timestamp eines anderen Zeitpunktes zu ermitteln. Dabei hilft die Funktion mktime.
<?php
// 24.12.2006 16:00:00
$jahr = 2006;
$monat = 12;
$tag = 24;
$stunde = 16;
$minute = 0;
$sekunde = 0;
// 24.12.2006 --> 1166972400
echo mktime($stunde, $minute, $sekunde, $monat, $tag, $jahr);
?> Anmerkung: Wer in das PHP-Handbuch schaut, der kann feststellen, dass man der Funktion als weiteren Parameter noch die Einstellung für Sommer- und Winterzeit angeben kann. Des weiteren ist es möglich von links nach rechts einzelne Werte weglassen kann. Dann würden diese automatisch mit dem aktuellen Wert angenommen.
Falsche Werte werden korrigiert, so dass es möglich ist, mit den Angaben zu rechnen. Bekanntlich gibt es den 45.12.2006 nicht:
<?php
// 24.12.2006 16:00:00 + 21 Tage
$jahr = 2006;
$monat = 12;
$tag = 24; // es kommen 21 Tage hinzu - siehe Argument in der mktime-Funktion
$stunde = 16;
$minute = 0;
$sekunde = 0;
// 14.01.2007 --> 1168786800
echo mktime($stunde, $minute, $sekunde, $monat, $tag+21, $jahr);
// Hinweis: Bei dem Argument für den Tag, habe ich 21 Tage hinzugezählt.
?> Hinweis:
1 Minute = 60 Sekunden
1 Stunde = 60*60 Sekunden (3600)
1 Tag = 60*60*24 Sekunden (86.000)
Beispiel: 25 Tage = 60*60*24*25 = 2160000 Sekunden
Wie man nun aus den 2160000 Sekunden einen Wert in Tagen bekommt? Nun einfach durch 60*60*24 Teilen und das Ergebniss ggf. noch runden.
checkdate
Um zu überprüfen, ob ein Datum existiert (man denke an den 30.02.) stellt PHP die Funktion checkdate zur Verfügung, welche wie folgt genutzt werden kann:
<?php
// die Daten könnten ebenso gut aus der Übergabe von Daten aus einem Formular stammen.
// 30.02.2009
$tag = 30;
$monat = 2;
$jahr = 2009;
if(checkdate($monat, $tag, $jahr))
{
echo 'Datum gültig!';
}
else
{
echo 'Datum nicht gültig!';
}
// nun noch als Vergleich der 10.02.2009. Dafür ändere ich nur den Tag.
$tag = 10;
if(checkdate($monat, $tag, $jahr))
{
echo 'Datum gültig!';
}
else
{
echo 'Datum nicht gültig!';
}
?> date
Die Funktion date() dürfte die wohl am meisten genutzte Datumsfunktion sein.
Hier lohnt sich auf jeden Fall mal ein Blick ins Handbuch: date
date() erwartet als Parameter einen string. Der String definiert die Formatierung der Ausgabe. Dafür sind einige Zeichen definiert.
<?php
echo date('d.m.Y')
?> Am besten ist es, einfach mal ein paar verschiedene Werte auszuprobieren.
Das schöne an der date-Funktion ist, dass mal optional als zweiten Parameter einen UNIX-timestamp angeben kann. Dann wird nicht der aktuelle Wert in der gewünschten Form ausgegeben, sondern der des timestamps.
<?php
echo date('d.m.Y', 1166972400);
// oder alternativ:
$jahr = 2006;
$monat = 12;
$tag = 24;
$stunde = 16;
$minute = 0;
$sekunde = 0;
echo date('d.m.Y', mktime($stunde, $minute, $sekunde, $monat, $tag, $jahr));
?> microtime funktioniert ähnlich zu time, jedoch werden hier auch Mikrosekunden zurückgegeben.
Beispiel:
<?php
echo microtime();
?> 0.04687700 1163424951
Um diese nun von einander zu trennen kann man die Funktion explode nutzen:
<?php
list($usec, $sec) = explode(" ", microtime());
echo 'Sekunden: '.$sec.'<br />';
echo 'Mikrosekunden: '.$usec;
?> Leichter geht das übrigens seit PHP5, denn dort kann man der Funktion einen Parameter übergeben:
<?php
echo microtime(true);
?> Im manual steht, wie es geht, wenn man mit PHP5 die Skriptlaufzeit messen will:
<?php
$start = microtime(true);
// hier arbeitet euer Skript
$end = microtime(true);
echo 'das Skript brauchte '.($end-$start).' Sekunden';
?> easter_date
Die Funktion date() kennt ihr ja bereits. Der Funktion kann man einen Zeitpunkt übergeben, um diesen im gewünschten Format auszugeben.
Ein interessanter Zeitpunkt ist der Tag des Ostersonntags. Logischerweise findet der stets an einem Sonntag statt. Um genau zu sein, es ist seit dem Jahr 325 als der erste Sonntag nach dem ersten Vollmond des Frühlings definiert. Das Benutzen von astronomischen Tafeln wurde durch die Osterformel von C.F. Gauß vom Jahre 1800 überflüssig. Auf dieser Osterformel basieert auch die Funktion easter_date().
Folgendes Skript
<?php
echo easter_date();
?> <?php
echo easter_date(2010);
?> <?php
echo 'Ostersonntag 2010: '.date('d.m.Y' ,easter_date(2010));
?> Ostersonntag 2010: 04.04.2010
Karfreitag: 2 Tage abziehen
Aschermittwoch: 46 Tage abziehen
Christi Himmelfahrt: 39 Tage addieren
Pfingsten 49 Tage später
Fronleichnam 60 Tage später
Pfingstsonntag kann man nun also so bestimmen:
<?php
echo 'Pfingstsonntag: '.date('d.m.Y', mktime(0, 0, 0, date('m', easter_date(2010)), date('d', easter_date(2010)+49), 2010));
// Ausgabe ist dann:
// Pfingstsonntag: 23.05.2010
?> Muttertag ist der zweite Sonntag im Mai:
<?php
echo 'Muttertag 2010: '.date('d.m.Y', mktime(0, 0, 0, (14-date('w', mktime(0, 0, 0, 5, 0, 2010))), 2010));
// Ausgabe ist dann:
// Muttertag 2010: 09.05.2010
?> <?php
echo '1. Advent 2010: '.date('d.m.Y', mktime(0, 0, 0, 11, 26+(7-date('w', mktime(0, 0, 0, 11, 26, 2010))), 2010));
// Ausgabe ist dann:
// 1. Advent 2010: 28.11.2010
// der 2., 3. und 4. Advent ergeben sich daraus.
?> Buß- und Bettag ist 11 Tage vor dem 1. Advent. Also wie eben - nur 11 Tage im mktime abziehen:
<?php
echo 'Buß- und Bettag 2010: '.date('d.m.Y', mktime(0, 0, 0, 11, 26+(7-date('w', mktime(0, 0, 0, 11, 26, 2010)))-11, 2010));
// Ausgabe ist dann:
// Buß- und Bettag 2010: 17.11.2010
?> easter_days
Manchmal reicht einem, wenn man weiß, wieviele Tage zwischen dem 21. März und dem Ostersonntag liegen. Da hilft die Funktion easter_days().
Beispiel:
<?php
echo easter_days();
?> date_sunrise
Mit dieser Funktion ist es möglich (ab PHP5) den Zeitpunkt des Sonnenaufganges zu berechnen. Der Funktion werden lediglich ein paar notwendige Ortsangaben mitgegegben, damit die Uhrzeit auch stimmt! Schließlich gilt für München eine andere Zeit als für Paris!
Für das Beispiel Bremen gilt:
Latitude: 53.04 North
Longitude: 8,48 Osten
Zenith ~= 90
offset: +1 GMT
<?php
echo 'Sonnenaufgang in Bremen am: '.date("d.m.Y").' um '.date_sunrise(time(), SUNFUNCS_RET_STRING, 53.04, 8.48, 90, 1);
?> Sonnenaufgang in Bremen am: 13.11.2006 um 07:51
date_sunset
Auf die gleiche Weise lässt sich auch der Zeitpunkt des Sonnenunterganges bestimmen:
<?php
echo 'Sonnenuntergang in Bremen am: '.date("d.m.Y").' um '.date_sunset(time(), SUNFUNCS_RET_STRING, 53.04, 8.48, 90, 1);
?> hier lohnt auf jeden Fall ein Blick ins Handbuch!
Mit dieser Funktion werden lokale Informationen gesetzt. Das kann zB die Zeit betreffen.
<?php
setlocale(LC_TIME, "de_DE", 'de_DE@euro', 'de', 'ge');
?> strftime
bei dieser Funktion lohnt sich ein Blick ins Handbuch:
Die Werte nach dem % sind definiert. Eine Liste ist im Handbuch aufgeführt. So ergibt folgender Code:
<?php
setlocale(LC_TIME, "de_DE", 'de_DE@euro', 'de', 'ge');
/* Ausgabe: Freitag 22 Dezember 1978 */
echo strftime ("%A %e %B %Y", mktime (0, 0, 0, 12, 22, 1978));
?> Wochentag, Tag im Monat, Monat, Jahr.
In diesem Fall den 22.12.1978.
Anmerkung:
Jetzt solltet Ihr eigentlich in der Lage sein, Datums- und Zeitfunktionen bei PHP anzuwenden. Die verwendeten Funktionen findet Ihr alle im PHP-Manual.
Weitere - hier nicht behandelte - Zeitfunktionen sind:
- date_default_timezone_get
- date_default_timezone_set
- getdate
- gettimeofday
- gmdate
- gmmktime
- gmstrftime
- idate
- localtime
- strptime
- strtotime
Solltet Ihr Fragen zu dem Tutorial haben, so schreibt bitte einen Beitrag im PHP-Forum mit einem Verweis auf dieses Tutorial.
Danke.
Ich hoffe, dass ich Euch hier etwas weiterhelfen konnte.
Grüße Jann Hendrik

Bereiche
Kategorien (Alle Bereiche)
Neue Artikel
Neue Blog-Einträge
Neue Beiträge
STDIN-Daten auslesen, falls vorhanden
Moin moin!
Server-Administratoren arbeiten ja zumeist auf der Console und nutzen kleine oder große Shell-Scripte, um ihre Arbeitsabläufe zu vereinfachen oder Funktionen bereit zu stellen, für die es noch keine Komplett-Lösung gibt. Hierbei sind die Möglichkeiten nahezu grenzenlos.