SELFPHP

SELFPHP-Druckversion
Original Adresse dieser Seite:
http://www.selfphp.de/praxisbuch/praxisbuchseite.php?site=173&group=30&page=2
© 2001-2017 E-Mail SELFPHP OHG, info@selfphp.de
© 2005-2017 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de


Zeitfunktionen


Ganz ähnlich wie mit dem Datum kann auch mit der Zeit gearbeitet werden. Die folgende Tabelle enthält eine Auflistung der wesentlichen Zeitfunktionen.

FunktionBeispielBeschreibung
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) => 1104534000Gibt 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) => 1104537600Gibt 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() => 1073770551Gibt den Unix-Zeitstempel sekundengenau zurück.
microtime()microtime() => 0.96976100 1073770614Wie time(), aber die Genauigkeit liegt im Mikrosekundenbereich. Ist nicht unter Windows verfügbar.
strftime("format",$tstamp)strftime("%A") => SaturdayFormatiert 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") => SaturdayWie 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
{PSP}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
)
{PSP}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:


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.

SymbolRückgabewerte (Beispiele)Beschreibung
%aMon bis SunAbgekürzter Name des Wochentags, abhängig von der gesetzten Umgebung.
%AMonday bis SundayAusgeschriebener Name des Wochentags, abhängig von der gesetzten Umgebung.
%bJan bis DecAbgekürzter Name des Monats, abhängig von der gesetzten Umgebung.
%BJanuary bis DecemberAusgeschriebener Name des Monats, abhängig von der gesetzten Umgebung.
%csiehe setlocale() weiter untenWiedergabewerte für Datum und Zeit, abhängig von der gesetzten Umgebung.
%C00 bis 99Jahrhundert, Jahr geteilt durch 100, gekürzt auf Integer.
%d01 bis 31Tag des Monats als Zahl.
%e1 bis 31Tag des Monats als Dezimalwert, einstelligen Werten wird ein Leerzeichen vorangestellt.
%H00 bis 23Stunde als Zahl im 24-Stunden-Format.
%I(großes i) 01 bis 12Stunde als Zahl im 12-Stunden-Format.
%j001 bis 366Tag des Jahres als Zahl.
%m01 bis 12Monat als Zahl, ohne führende 0.
%M00 bis 59Minute als zweistelliger Dezimalwert.
%n-Neue Zeile
%pam oder pmEntweder am oder pm, abhängig von der gesetzten Umgebung.
%S0 bis 59Sekunden als Dezimalwert.
%t-Tabulator
%U00-06Wochennummer im Jahr, startet die Zählung am ersten Sonntag.
%W00-06Wochennummer im Jahr, startet die Zählung am ersten Montag.
%w0 (Sonntag) bis 6 (Samstag)Numerische Darstellung des Wochentags.
%xsiehe setlocale() weiter untenVollständige Datumsangabe entsprechend den lokalen Einstellungen.
%Xsiehe setlocale() weiter untenVollständige Datumsangabe entsprechend den lokalen Einstellungen.
%y04Zweistellige Ausgabe der Jahreszahl.
%Y2004Vierstellige 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
{PSP}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:

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.