Hallo Mark,
1.Frage: Wie realisiert mein Forum das?
Ich nehme an, es zieht einfach die Stunden ab bzw. addiert die Stunden, die zur lokalen Zeitzone von Dir fehlen. Oder es hat einen komplexeren Algorithmus, wie unten beschrieben.
Könnte dann natürlich einfach bei time() einfach 5 Stunden abziehen, aber gibt es da vielleicht eine "elegantere" Lösung?
time() liefert ja einen UNIX-Timestamp. Ein UNIX-Timestamp ist die Anzahl an Sekunden vom 1.1.1970 00:00:00 GMT an. Der ist immer in GMT bzw. UTC angegeben. Die Funktionen date(), mktime(), strftime(), etc. wandeln die Zeit ja um. Du könntest Wrapper-Funktionen um diese Funktionen erstellen, die diese Zeitzonenberchnungen durchführen, bevor sie dann die Werte an die richtigen Funktion übergeben. Also Bsp:
function mein_date ($format, $timestamp = null) {
if (is_null ($timestamp)) {
$timestamp = time ();
}
$timestamp += 5 * 3600; // oder so etwas
return date ($format, $timestamp);
}
Dann rufst Du statt date (...) immer mein_date (...) auf.
3.Frage: Beispiel Gästebuch, ein Beitrag wird geschrieben ich speicher "now()" in ein DATETIME. Ist da das Problem mit der Zeitzone auch lösbar, oder müsste ich da bei der Planung umdenken?
Deine Datenbank bietet sicherlich Funktionen, um mit Datum- und Zeitangaben zu rechnen. Setze diese ein statt einfach NOW().
Achja, generell noch:
Das einzige, was problematisch wird, sind Sommerzeit/Winterzeit. Wenn Du Deinen Server in einem Land hast, in dem Sommer- und Winterzeit zur gleichen Zeit umgestellt werden, hast Du kein Problem, dann kannst Du einfach die fünf Stunden dazuzählen/abziehen. Wenn dies jedoch nicht der Fall ist, wird die Sache um einiges komplizierter; im Prinzip müsstest Du dann in den Wrapper-Funktionen nicht mehr mit z.B. date() sondern mit gmdate() arbeiten (GMT kennt keine Sommer/Winterzeit) und natürlich dann statt der 5 Stunden Differenz die Differenz der hiesigen Zeitzone zu GMT (1 Stunde) dazuzählen/abziehen, und evtl. auch noch 1 zusätzliche Stunde, falls gerade Sommerzeit ist. Es gibt Formeln, um Sommer/Winterzeitanfang zu berechnen, such mal mit Google danach.
Viele Grüße,
Christian