Dynamische Webseiten mit PHP

Zeitfunktionen

Allgemeines

Zeitfunktionen können für die zeitbasierte Darstellung von Informationen dienen. Zum Beispiel Kalender, Informationen mit einer bestimmten Gültigkeitsdauer oder Veröffentlichungsdatum, Organizer etc..

Für diese Funktionen ist keine Installation erforderlich, sie gehören zum Grundbestand von PHP.

Sie ermöglichen es aktuelle Datums- und Zeitangaben vom Server, auf dem PHP läuft, abzufragen. Daher hängen sie von den lokalen Systemeinstellungen des Servers ab. Ein besonderes Augenmerk sollte auf der Sommer- bzw. Winterzeit und den Schaltjahre liegen.

Datums- und Zeitfunktionen von PHP basieren auf Auswertung des UNIX-Zeitstempel. Dieser gibt Anzahl der Sekunden an, die seit dem Beginn der UNIX-Epoche am 1. Januar 1970 01:00 Uhr nach Greenwich Zeit vergangen sind. Zeitpunkte davor werden entsprechend negativ dargestellt.

0 bedeutet 1-1-1970 01:00
1072949400 bedeutet 1-1-2004 10:30
-159401222 bedeutet 13.12.1964 02:52

Die Ausgabe von Datums- und Zeitangaben kann mit Hilfe dieser Funktionen in unterschiedlichster Weise formatiert werden.


PHP-Befehle

checkdate
checkdate($mon, $day, $year)
Prüft ein Datum auf Gültigkeit.
Ist das angegebene Datum gültig, wird TRUE zurückgegeben, ansonsten FALSE.
Ein Datum wird als gültig angesehen, wenn
  • das Jahr zwischen 1 und 32767 (inklusive) liegt,
  • der Monat zwischen 1 und 12 (inklusive) liegt und
  • der Tag innerhalb der erlaubten Werte des angegebenen Monats ist. Schaltjahre werden berücksichtigt.


date
date („format“, $tstamp)
Formatiert ein Datum
Erwartet als Parameter Formatanweisungen welche datum-segmente angezeigt werden sollen.
Werden nur die Formatoptionen angegeben, liefert die Funktion eine Anzeige des derzeit aktuelle Datums. Soll ein spezielles Datum eingegeben werden, kann das optional über Zeitstempel erfolgen. Die Angabe erfolgt in Sekunden seit der Unix-Epoche 1.1.1970.

Folgende Formatierungsanweisungen sind möglich:

Element Erklärung/Resultat
a "am" oder "pm"
A "AM" oder "PM"
B Swatch-Internet-ZeitErfindung der Firma Swatch, bei der 24 Stunden in 1000 Zyklen, so genannte Beats, eingeteilt werden.
d Tag des Monats, 2-stellig mit führender Null: "01" bis "31"
D Tag der Woche als 3 Buchstaben, z.B. "Fri"
F Monat als ganzes Wort, z.B "January"
g Stunde im 12-Stunden-Format, ohne führende Null: "1" bis "12"
G Stunde im 24-Stunden-Format, ohne führende Null: "0" bis "23"
h Stunde im 12-Stunden-Format: "01" bis "12"
H Stunde im 24-Stunden-Format: "00" bis "23"
i Minuten: "00" bis "59"
I (großes "i") "1" bei Sommerzeit, sonst "0"
j Tag des Monats ohne führende Null: "1" bis "31"
l (kleines "l") ausgeschriebener Tag der Woche, z.B. "Friday"
L boolscher Wert für Schaltjahre: "0" oder "1"
m Monat: "01" to "12"
M Monat als 3 Buchstaben, z.B. "Jan"
n Monat ohne führende Null: "1" bis "12"
O Zeitdifferenz zur Greenwich Zeit in Stunden (z.B. +0200)
r Nach RFC 822 formatiertes Datum; z.B.: "Sun, 7 Oct 2001 14:56:02 +0200" (seit PHP 4.0.4)
s Sekunden: "00" bis "59"
S Anhang der englischen Aufzählung, 2 Buchstaben; z.B.:" "st", "nd", "rd" oder "th"
t Anzahl der Tage des angegebenen Monats: "28" bis "31"
T Zeitzoneneinstellung des Rechners, z.B. "EST" oder "MDT"
U Sekunden seit Beginn der UNIX-Epoche (January 1 1970 00:00:00 GMT)
w Wochentag numerisch, beginnend mit "0" (Sonntag) bis "6" (Samstag)
W ISO-8601 Wochennummer des Jahres (Woche beginnt mit Montag) (seit PHP 4.1.0)
y Jahr als zweistellige Zahl, z.B. "99"
Y Jahr als vierstellige Zahl, z.B. "1999"
z Tag des Jahres: "0" bis "365"
Z Offset der Zeitzone gegen GTM ("-43200" bis "43200") in Sekunden. Der Offset für Zeitzone West nach UTC ist immer negativ und für Zeitzone Ost nach UTC immer positiv.

=> date testen


gmdate
gmdate(„format“, $tstamp)
Wie Funktion date(), jedoch Zeitzone
  • Datum und Zeit beziehen sich nicht auf das lokale System sondern auf die Greenwich Mean time
  • Das heißt man erhält bei der Ermittlung des aktuellen Datums nur die englische Tages- und Monatsbezeichnung
  • Um deutsche Tages- und Monatsbezeichnungen ausgeben zu können muss die englische Bezeichnung mit Hilfe eines Feldes umgewandelt werden

gmmktime
gmmktime($h, $min, $sec, $mon, $day, $year, $dst)
Wie Funktion mktime(), jedoch Zeitzone GMT
  • Identisch zu mktime() Die angegebenen Parameter werden aber als GMT-Datum/Zeit interpretiert.



getdate
getdate ($timestamp)
Gibt ein array mit Datums- und Zeitangabe zurück
  • um das auszulesende Datum anzugeben können der Anweisung getdate() der Parameter Zeitangabe hinzugefügt werden
  • Wird kein Parameter angeben so werden die aktuellen Datums- und Zeitwerte ausgegeben

Element Erklärung Rückgabewert
Seconds Sekunde der aktuellen Uhrzeit 0 bis 59
Minutes Minute der aktuellen Uhrzeit 0 bis 59
Hours Stunde der aktuellen Uhrzeit 0 bis 24
Mday Tag des aktuellen Monats 0 bis 31
Wday Numerischer Tag der Woche 0 = Sonntag, 1= Montag, ..., 6 = Samstag
Mon Monat als Zahl 1 = Januar, ...., 12 = Dezember
Year Jahreszahl 1970 bis….
Yday Numerischer Tag des Jahres 0 bis 366
Weekday Ausgeschriebener Wochentag (in Englisch) Sunday, Monday..., Saturday
Month Ausgeschriebener Monat (in Englisch) January, February,..., December
0 Sekunden seit 01.01.1970 0 bis ....

=> getdate testen



microtime
microtime()
Gibt den UNIX-Zeitstempel als String im Format Mikrosekunden Sekunden zurück
  • Der Befehl microtime() gibt die aktuelle Uhrzeit als Zeichenkette in der Form
    "Mikrosekunden Sekunden" zurück. Dabei ist "Sekunden" die Anzahl der vollen
    Sekunden seit Beginn der UNIX-Epoche (0:00:00, 1. Januar 1970 GMT) und
    "Mikrosekunden" der Bruchteil der laufenden Sekunde, den Sie zu den vollen
    Sekunden addieren müssen, um die aktuelle Zeit zu erhalten.
    Die beiden Werte im Ergebnisstring sind durch ein Leerzeichen getrennt.
    Die Funktion microtime() ist nur auf Systemen möglich, welche auch den Aufruf
    gettimeofday() unterstützen.

mktime
mktime($h, $min, $sec, $mon,$day, $year, $sdt)
Gibt den UNIX-Zeitstempel für ein Datum zurück
  • Gibt den UNIX Timestamp/Zeitstempel an Hand der gegebenen Argumente zurück. Der Zeitstempel ist ein long-integer-Wert, der die Anzahl der Sekunden zwischen der UNIX Epoche (January 1 1970) und der angegebenen Zeit enthält.
  • Einzelne Argumente können von rechts nach links weggelassen werden. Sie werden dann ersetzt mit den Werten der lokalen Systemzeit bzw. des lokalen Systemdatums.
  • is_dst kann bei Sommerzeit auf 1 gesetzt werden. 0 bedeutet Winter-/Normalzeit, -1 (Vorgabewert) heißt, dass nicht bekannt ist, ob Sommer- oder Winterzeit herrscht. Falls nicht bekannt ist (-1), ob Sommer- oder Winterzeit herrscht, versucht PHP selbst dies herauszufinden. Das kann zu unerwarteten (aber richtigen) Ergebnissen führen.
  • Anmerkung: is_dst wurde in 3.0.10. eingeführt.
  • mktime() ist hilfreich bei Datumsberechnungen und -überprüfungen, da automatisch das korrekte Datum für ungültige Angaben berechnet wird.
  • Das Jahr darf zwei- oder vierstellig angegeben werden. Werte von 0 bis 69 stehen dann für die Jahre 2000 bis 2069, und 70 bis 99 für die Jahre von 1970-1999 (auf Systemen, die time_t als 32Bit-Integer abbilden, liegt der gültige Bereich für Jahr zwischen 1902 und 2037).
  • Der letzte Tag eines gegebenen Monats kann als der Tag "0" des nächsten Monats ausgedrückt werden (nicht als der Tag "-1").
  • Datumsangaben, bei denen das Jahr, der Monat und Tag gleich Null sind, werden als ungültig angesehen.

=> mktime testen


strftime
strftime („format“, $tstamp)
Formatiert ein Datum nach den lokalen Einstellungen
  • Angabe erwartet als Parameter die Formatanweisung
  • Ohne Angabe des Parameters $tstamp liefert die Funktion das aktuelle Datum zurück
  • $tstamp muss unter Windows angegeben werden!
  • Alle Formatanweisungen müssen innerhalb strftime() in „“ angegeben werden
  • $time=setLocale(LC_ALL,"ge");
Element Erklärung/Resultat
a Abgekürzter Tag der Woche
A Bezeichnung für den Wochentag
b Abgekürzter Monatsname
B Name des Monats
c Datum und Uhrzeit, abhängig von der Umgebungseinstellung: z.B. 03.06.03 14:00:57
d Tag des Monats mit führender Null: 01 bis 31
H Stunde im 24-Stunden-Format mit führender Null: 00 bis 23
I Stunde im 12-Stunden-Format mit führender Null: 00 bis 11
j Tag des Jahres von 1 bis 366
m Zahl des Monats mit führender Null: 01 bis 12
M Minuten mit führender Null: 00 bis 59
p oder r Tagesbezeichnung in am oder pm bzw. in der Umgebung festgelegte Zeichenkette
S Sekunden mit führender Null: 00 bis 59
w Zahl des Wochentages ohne führende Null: 0 bis 6 (0 für Sonntag bis 6 für Samstag)
x Datumswiedergabe ohne Zeit
X Zeitwiedergabe ohne Datum
Y Jahr als vierstellige Zahl : 2003
y Jahr als zweistellige Zahl : 03
Z Sommerzeit

=> aktuelles deutsches Datum testen
=> aktuelles englisches Datum testen


time
time()
Gibt den aktuellen UNIX-Zeitstempel zurück.
  • Wird ohne Angabe von Parametern verwendet

gettimeofday
gettimeofday()
Gibt die aktuelle Zeit zurück
Die Zeitangaben werden als assoziatives Array zurück gegeben. Folgende Arrayelemente sind vorhanden:
  • "sec" - Sekunden
  • "usec" - Microsekunden
  • "minuteswest" - Minuten westlich von Greenwich
  • "dsttime" - Art der Korrektur der Sommerzeit

gmstrftime
gmstrftime(„format“, $tstamp)
Wie Funktion strftime(), jedoch Zeitzone GMT


strtotime
strtotime ( string time [, int now])
Wandelt ein beliebiges Datum (englisches Format) in einen UNIX-Zeitstempel (Timestamp) um
  • Mit strtotime() kann man sich eine Datums-/Zeitangabe (time) in einen UNIX-
    Timestamp umwandeln lassen. Die Zeitangabe kann ein konkretes Datum
    enthalten, das Wort "now" für die aktuelle Zeit oder Zeitoffsets (z.B. "+2 day",
    liefert den Zeitstempel für dieselbe Uhrzeit übermorgen). Wichtig ist dabei, dass
    die Angaben in englischer Sprache formuliert sein müsssen. Versucht man z.B.
    mit der deutschen Schreibweise den Befehl auszuführen, kommt es zu einem
    Fehler.
    Wenn die Funktion auf ungültige Angaben stößt, liefert sie den Wert -1 zurück.

    Der optionale Parameter now ist nur sinnvoll, wenn Sie in time einen Zeitoffset
    angeben. In diesem Fall können Sie im Parameter now den Zeitstempel
    übergeben, von dem aus die Funktion den Zeitoffset berechnen soll. Lassen Sie
    den Parameter now weg, nimmt die Funktion die aktuelle Zeit als Basis.


localtime
localtime(time() , 1);
Ermittelt die lokalen Zeitwerte
  • Kann ohne jegliche Parameter aufgerufen werden, dann wird die aktuelle Zeit als wert genommen
  • Es ist auch möglich um einen anderen Zeitwert zu ermitteln, den entsprechenden Zeitstempel in Sekunden einzugeben
  • Das erste (optionale) Argument von localtime() ist der UNIX-Zeitstempel (Timestamp). Fehlt dieser, wird die aktuelle Zeit genommen. Als zweites wird der Parameter is_associative übergeben. Ist dieser 0 oder nicht gesetzt, wird das Werte-Array als reguläres, numerisch indiziertes Array zurück gegeben. Ist er dagegen 1, liefert localtime() ein assoziatives Array zurück, welches alle Elemente der Struktur des localtime-Aufrufs in C enthält.
  • Es können Werte in einem assoziativen Feld abgelegt werden


Bezeichner des assoziativen Feldes:

„tm_sec“ –Sekunde
„tm_min“ – Minute
„tm_hour“ – Stunde
„tm_mday – Tag des Monats
„tm_wday“ – Tag der Woche
„tm_yday“ – Tag des Jahres
„tm_mon“ – Monat
„tm_year“ – Jahr
„tm_isdst“ – Für das Datum ist die Sommerzeit zu berücksichtigen

=> Kalender 2005 auf deutsch testen
=> Kalender 2005 auf französisch testen
=> Kalender 2005 auf englisch testen


Unter Mitwirkung von Anika Timm (Referat im SoSe2003).