Mark: ...evtl auch MySql: Zeitzonen

Hallo Ihrs,

Folgendes:

-Betreibe eine deutsche Seite
-Die Seite liegt auf einem ausländischen Server ( -5 Std Zeitunterschied)
-Habe u.a. auch ein Forum auf diesem Server liegen. Bei diesem habe ich die Möglichkeit meine aktuelle Zeitzone zu bestimmen und denn wird mir bei Beiträgen etc. die deutsche Uhrzeit angezeigt.

1.Frage: Wie realisiert mein Forum das?

2.Frage: Wenn ich selber php-Scripte schreibe wie kann ich das am günstigsten lösen, dass auch dann die deutsche Uhrzeit eingetragen wird? Könnte dann natürlich einfach bei time() einfach 5 Stunden abziehen, aber gibt es da vielleicht eine "elegantere" Lösung?

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?

Gruss, Mark

  1. 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

    1. Hallo Christian,

      über die Sommer/Winterzeit hatte ich noch gar nicht weiter nachgedacht, danke für den Hinweis.

      Die Funktion ist schon mal ein sehr guter Ansatz, denke ich kann dann auf Berechnungen in MySql verzichten

      Vielen Dank :D

      Gruss, Mark