|
web.dok
Organisation
Übungen
Themen
Literatur
|
|
|
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.
=> checkdate testen
|
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).
|
|