Hallo wahsaga,
Aber seltsamerweise nicht die Zeitzone. Ist die in einer anderen Angabe versteckt?
Zeitzone von was?
Die des Servers?
date(): Parameter 'O' Unterschied zu GMT in Stunden, Parameter 'T' Zeitzonenname, Parameter 'Z' Zeitzonenoffset in Sekunden.
'T' ist nicht der Zeitzonenname, sondern die Abkürzung der Zeitzone, z.B. 'UTC', 'GMT', 'EDT', 'CEST', etc. Allerdings: Die Abkürzungen sind nicht eindeutig, z.B. bezeichnet CET idR. UTC+1, CEST idR. UTC+2, allerdings kann CET auch UTC+2 und CEST auch mal UTC+3 bedeuten. Bei EDT/EST ist es noch interessanter, die bezeichnen nämlich sowohl Zeitzonen in den USA als auch in Australien (und dazwischen sind etwa 12 Stunden Differenz).
Ferner ist es nicht möglich, mittels der Zeitzonen-Abkürzungen die gültigen Umstellungsregeln für Sommer- und Winterzeit zu ermitteln. Denn die Umstellungsregel kann je nach Land variieren, selbst wenn sie die gleichen Abkürzungen und auch den gleichen Offset im Sommer und im Winter haben, d.h. man bekommt aus dem Zeitzonennamen höchstens ein Offset heraus, und das bekommt man auch durch die anderen Parameter 'O' und 'Z', die Abkürzungen sind in meinen Augen im Prinzip komplett unnütz (Deswegen verbietet RFC 822 z.B. Mailprogrammen, alle möglichen Abkürzungen in den Date-Header zu schreiben, es sind nur ganz bestimmte erlaubt, und spätere RFCs schränken das dann noch weiter ein).
Die einzigen wirklich brauchbaren Zeitzonennamen sind die Schlüssel der tz database, in der Form Europe/Berlin, America/New_York, etc. Allerdings: Diese Zeitzonendatenbank wird aktuell nur von vielen UNIX-Betriebsystemen verwendet, nicht jedoch z.B. von Windows. Microsoft hat unter Windows nämlich ein deutlich simpleres System für die Zeitzonen verwendet - z.B. kann nur eine Zeitzonenwechselregel auf einmal gespeichert werden und viele Zeitzonen (z.B. Europe/Berlin und Europe/Brussels) sind zusammengefasst [1]. Und unter UNIX-Betriebsystemen gibt es keinen Standardweg, die Namen der eingestellten Zeitzone herauszubekommen - manchmal steht in /etc/timezone oder /etc/TIMEZONE der Name drin, manchmal ist /etc/localtime keine Kopie, sondern ein symbolischer Link auf die korrekte Zeitzonendatei selbst, wodurch man etwas am Pfad rumextrahieren könnte. Sofern in PHP allerdings open_basedir gesetzt ist, kann man vergessen, irgendwas in /etc rumzusuchen. Ganz eventuell ist übrigens auch mal die TZ-Umgebungsvariable gesetzt, damit könnte man etwas anfangen (allerdings: selbst wenn sie gesetzt ist, könnte da dummerweise auch wieder nur eine Abkürzung drin stehen).
Alles in allem: Es gibt keinen wirklich guten Weg, den _Namen_ der Systemzeitzone herauszubekommen, der _aktuelle_ Offset zu GMT ist jedoch kein Problem. Da der Offset sich jedoch für frühere oder spätere Zeitpunkte ändern kann (Sommer-/Winterzeit), ist es ausschließlich möglich, den Offset der _aktuellen_ Zeit zu bekommen, bei einem anderem Datum fliegt man da gehörig auf die Schnauze.
Die des Clients?
Javascript.
Genauer gesagt http://de.selfhtml.org/javascript/objekte/date.htm#get_timezone_offset@title=getTimezoneOffset() (allerdings ist da das Offset gerade negativ, d.h. bei UTC+1 liefert die Funktion -1 zurück).
Viele Grüße,
Christian
[1] Was auf gut Deutsch heißt: Windows macht es sich da viel zu einfach, die Zeitzonen werden effektiv nicht korrekt abgebildet. Ich frage mich z.B., wie Microsoft das in Israel anstellt, das Regelwerk dort passt nämlich nicht in das Schema, auf das Windows angewiesen ist. Allerdings: Unter Windows ist es per API-Aufruf problemlos möglich, den Windows-Namen der aktuellen Zeitzone zu bekommen - nützt aber in PHP auch nicht wirklich viel (API-Funktionen aufrufen ist nicht wirklich trivial).
"I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup