Ganz ähnlich wie mit dem Datum kann auch mit der Zeit gearbeitet werden. Die folgende Tabelle enthält eine Auflistung der wesentlichen Zeitfunktionen.
Funktion | Beispiel | Beschreibung | localtime ([$tstamp [, is_associative]]) | localtime() | Ermittelt die lokalen Zeitwerte. Sollte der optionale Parameter is_associative auf 1 gesetzt werden, wird ein assoziatives Array zurückgeliefert, ansonsten ein indiziertes. | mktime($hour, $min, $sec, $month, $day, $year, $dst) | mktime(0,0,0,1,1,2005) => 1104534000 | Gibt den Unix-Zeitstempel (Timestamp) für ein Datum zurück. Der Parameter $dst gibt an, ob es sich um Sommerzeit (1) oder Winterzeit (0) handelt. | gmmktime($hour, $min, $sec, $month, $day, $year, $dst) | gmmktime(0,0,0,1,1,2005) => 1104537600 | Gibt den GMT-Zeitstempel (Timestamp) für ein Datum zurück. Der Parameter $dst gibt an, ob es sich um Sommerzeit (1) oder Winterzeit (0) handelt. | time() | time() => 1073770551 | Gibt den Unix-Zeitstempel sekundengenau zurück. | microtime() | microtime() => 0.96976100 1073770614 | Wie time(), aber die Genauigkeit liegt im Mikrosekundenbereich. Ist nicht unter Windows verfügbar. | strftime("format",$tstamp) | strftime("%A") => Saturday | Formatiert eine Zeitausgabe. | gettimeofday() | print_r(gettimeofday()) => Array ( [sec] => 1073770692 [usec] => 849883 [minuteswest] => -60 [dsttime] => 1 ) | Gibt die aktuelle Tagszeit zurück. | gmstrftime("format",$tstamp) | gmstrftime("%A") => Saturday | Wie strftime(), jedoch mit GMT als Zeitzone. |
Einsatz von microtime()
Mithilfe der Funktion sind Sie in der Lage, den aktuellen Unix-Zeitstempel mit Mikrosekunden zu erhalten. Seit PHP 5 steht Ihnen für diese Funktion ein optionaler Parameter get_as_float zur Verfügung. Sollten Sie den Parameter mit true (1) setzen, gibt microtime() eine Fließkommazahl (float) zurück.
Beispiel
<?php
// PHP 4 ohne Parameter
function getmicrotime()
{
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
$time_start = getmicrotime();
for ($i=0; $i < 1000; $i++) {
//mach nichts,1000 mal
}
$time_end = getmicrotime();
$time = $time_end – $time_start;
echo "Nichts getan in $time Sekunden<br>";
// PHP 5 mit Parameter
$time_start = microtime(1);
for ($i=0; $i < 1000; $i++) {
//mach nichts,1000 mal
}
$time_end = microtime(1);
$time = $time_end – $time_start;
echo "Nichts getan in $time Sekunden<br>";
?>
Ausgabe
Nichts getan in 0.00095582008361816 Sekunden
Nichts getan in 0.00088214874267578 Sekunden
Einsatz von mktime()
Zahlreiche Datums- und Zeitfunktionen rechnen mit der internen Angabe des Unix-Zeitstempels. Diese Angabe stellt die Anzahl der Sekunden seit dem 01.01.1970 00:00 Uhr dar. Um nun eine solche Angabe für ein spezifisches Datum zu erhalten, setzen Sie mktime() ein. Hier der Zeitstempel für 1.1.2004:
// Ausgabe 1072911600
echo mktime(0,0,0,1,1,2004);
Der letzte Tag eines Monats kann als der Tag "0" des nächsten Monats ausgedrückt werden. Jedes der folgenden Beispiele gibt die Zeichenkette "Letzter Tag im Feb. 2000 ist der 29." zurück.
$letzertag = mktime (0,0,0,3,0,2004);
// Letzter Tag im Feb. 2000 ist der 29.
echo strftime ("Letzter Tag im Feb. 2004 ist der %d.", $letzertag);
$lastday = mktime(0,0,0,4,-31,2004);
// Letzter Tag im Feb. 2004 ist der 29.
echo strftime ("Letzter Tag im Feb. 2000 ist der %d.", $letzertag);
Datumsberechnungen
Manchmal müssen mit Daten Berechnungen vorgenommen werden. Die folgenden Beispiele zeigen, wie man das mit den gezeigten Funktionen leicht realisieren kann:
gestern = mktime(0,0,0,date("m"), date("d")-1, date("Y"));
$morgen = mktime(0,0,0,date("m"), date("d")+1, date("Y"));
$letztenmonat = mktime(0,0,0,date("m")-1, date("d"), date("Y"));
$naechstesjahr = mktime(0,0,0,date("m"), date("d"), date("Y")+1);
echo "Gestern: $gestern<br>";
echo "Morgen: $morgen<br>";
echo "Letzenmonat: $letztenmonat<br>";
echo "Nächstesjahr: $naechstesjahr<br>";
Ausgabe
Gestern: 1073689200
Morgen: 1073862000
Letzenmonat: 1071097200
Nächstesjahr: 1105398000
oder mithilfe von date formatiert:
echo "Gestern: ". date("d.M.Y",$gestern) . "<br>";
echo "Morgen: ". date("d.M.Y",$morgen) . "<br>";
echo "Letztenmonat: ". date("d.M.Y",$letztenmonat) . "<br>";
echo "Nächstesjahr: ". date("d.M.Y",$naechstesjahr) . "<br>";
Ausgabe
Gestern: 10.Jan.2004
Morgen: 12.Jan.2004
Letztenmonat: 11.Dec.2003
Nächstesjahr: 11.Jan.2005
Einsatz von localtime()
Die Funktion localtime() gibt entweder ein indiziertes oder ein assoziatives Array zurück, welches hinsichtlich seiner Struktur identisch ist mit dem des Funktionsaufrufs in C.
Beispiel – indiziertes Array
<pre>
<?php
print_r(localtime());
?>
</pre>
Ausgabe
Array
(
[0] => 4
[1] => 35
[2] => 23
[3] => 10
[4] => 0
[5] => 104
[6] => 6
[7] => 9
[8] => 0
)
Beispiel – assoziatives Array
<pre>
<?php
print_r(localtime(mktime(0,0,0,10,1,2004),1));
?>
</pre>
Ausgabe
Array
(
[tm_sec] => 0
[tm_min] => 0
[tm_hour] => 0
[tm_mday] => 1
[tm_mon] => 9
[tm_year] => 104
[tm_wday] => 5
[tm_yday] => 274
[tm_isdst] => 1
)
Die Bezeichner der verschiedenen Schlüssel dieses assoziativen Arrays lauten:
- "tm_sec" – Sekunde
- "tm_min" – Minute
- "tm_hour" – Stunde
- "tm_mday" – Tag des Monats
- "tm_mon" – Monat des Jahres, beginnt bei 0 (Januar), endet bei 11 (Dezember)
- "tm_year" – Jahr seit 1900
- "tm_wday" – Tag der Woche
- "tm_yday" – Tag des Jahres
- "tm_isdst" – für das Datum ist die Sommerzeit zu berücksichtigen
Einsatz von strftime()
Die Funktion strftime() arbeitet ähnlich wie date() und formatiert eine Datums- und Zeitangabe anhand einer Formatierungsanweisung. Sie sollten jedoch beachten, dass die strftime()-Parameter nur teilweise mit denen von date() übereinstimmen und in einigen Fällen eine völlig andere Bedeutung haben.
Symbol | Rückgabewerte (Beispiele) | Beschreibung | %a | Mon bis Sun | Abgekürzter Name des Wochentags, abhängig von der gesetzten Umgebung. | %A | Monday bis Sunday | Ausgeschriebener Name des Wochentags, abhängig von der gesetzten Umgebung. | %b | Jan bis Dec | Abgekürzter Name des Monats, abhängig von der gesetzten Umgebung. | %B | January bis December | Ausgeschriebener Name des Monats, abhängig von der gesetzten Umgebung. | %c | siehe setlocale() weiter unten | Wiedergabewerte für Datum und Zeit, abhängig von der gesetzten Umgebung. | %C | 00 bis 99 | Jahrhundert, Jahr geteilt durch 100, gekürzt auf Integer. | %d | 01 bis 31 | Tag des Monats als Zahl. | %e | 1 bis 31 | Tag des Monats als Dezimalwert, einstelligen Werten wird ein Leerzeichen vorangestellt. | %H | 00 bis 23 | Stunde als Zahl im 24-Stunden-Format. | %I | (großes i) 01 bis 12 | Stunde als Zahl im 12-Stunden-Format. | %j | 001 bis 366 | Tag des Jahres als Zahl. | %m | 01 bis 12 | Monat als Zahl, ohne führende 0. | %M | 00 bis 59 | Minute als zweistelliger Dezimalwert. | %n | - | Neue Zeile | %p | am oder pm | Entweder am oder pm, abhängig von der gesetzten Umgebung. | %S | 0 bis 59 | Sekunden als Dezimalwert. | %t | - | Tabulator | %U | 00-06 | Wochennummer im Jahr, startet die Zählung am ersten Sonntag. | %W | 00-06 | Wochennummer im Jahr, startet die Zählung am ersten Montag. | %w | 0 (Sonntag) bis 6 (Samstag) | Numerische Darstellung des Wochentags. | %x | siehe setlocale() weiter unten | Vollständige Datumsangabe entsprechend den lokalen Einstellungen. | %X | siehe setlocale() weiter unten | Vollständige Datumsangabe entsprechend den lokalen Einstellungen. | %y | 04 | Zweistellige Ausgabe der Jahreszahl. | %Y | 2004 | Vierstellige Ausgabe der Jahreszahl. | %Z | -43200 bis 43200(entspricht: -12 / +12 Stunden) | Offset der Zeitzone in Sekunden. Der Offset für Zeitzone West nach UTC ist immer negativ und für Zeitzone Ost nach UTC immer positiv. | %% | % | Prozentzeichen |
Einsatz von setlocale()
Interessant ist an dieser Funktion, dass sich die Ausgabe mithilfe der Funktion setlocale() an die sprachlichen Besonderheiten einer bestimmten Region anpassen lässt.
Beispiel
<?php
echo strftime("%A auf Deutsch ");
setlocale(LC_TIME,'de_DE@euro', 'de_DE', 'de', 'ge');
echo strftime("%A");
?>
Ausgabe
Sunday auf Deutsch Sonntag
Es stehen diverse Kurzformen für die deutschsprachige Region zur Verfügung.
Die Funktion setlocale() hat folgenden Aufbau:
setlocale(category, localid);
Der Parameter category wird durch folgende Werte bestimmt:
- LC_ALL – Für alle folgenden Werte.
- LC_COLLATE – Wirkt auf Zeichenkettenvergleiche.
- LC_CTYPE – Wirkt auf die Zeichensetzung, beispielsweise in strtoupper().
- LC_MONETARY – Wirkt auf Währungsfunktionen wie localeconv().
- LC_NUMERIC – Bestimmt das Dezimaltrennzeichen.
- LC_TIME – Wirkt auf Datums- und Zeitformatierungen mit strftime().
- LC_MESSAGES – Für Systemmeldungen (verfügbar, wenn PHP mit liblintl kompiliert wurde).
Als localid wird der ISO-Landescode angegeben, auf dessen Parameter die Ausgabe gesetzt werden soll. Wird eine leere Zeichenkette genutzt, versucht PHP entsprechende Variablen in der Betriebssystemumgebung zu finden. Wird eine 0 angegeben, werden die aktuellen Einstellungen nicht geändert, dafür jedoch zurückgegeben. Die Funktion gibt FALSE zurück, wenn der lokale Code nicht implementiert wurde.
|