Eddie: Internationalisierung von Zeitangaben

Hallo allerseits,

ich will Zeitangaben aus einer MySQL-Datenbank (datetime) abhängig vom Sitz und der Sprache des Betrachters anzeigen.

Der datetime-Wert "2001-04-25 17:00:00" soll also bspw. in folgenden Varianten angezeigt werden:

  • deutscher Benutzer in Berlin: 19.00 Uhr
  • deutscher Benutzer in Bangkok: 1.00 Uhr
  • englischer Benutzer in Berlin: 7:00 pm
  • englischer Benutzer in Bangkok: 1:00 am

Die Formatierungen sind dabei das geringste Problem, nur wie bekomme ich raus (serverseitig, nicht per JavaScript!), in welcher Zeitzone der User sitzt?
Gibt's da eine fertige PHP-Funktion, oder eine Servervariable?

Danke für eure Hilfe,
Eddie

--
Old men and far travelers may lie with authority.
  1. Die Formatierungen sind dabei das geringste Problem, nur wie bekomme ich raus (serverseitig, nicht per JavaScript!), in welcher Zeitzone der User sitzt?

    Gar nicht, diese Information gehört nicht zu dem, was der Browser dem Server mitteilt oder der Server in irgendeiner Form sicher aus den gelieferten Daten schätzen könnte. Du wirst die Zeit per Javascript ausgeben müssen, zusammen mit einem <noscript>-Block und der Standardzeit für den Fall, daß Javascript abgeschaltet ist.

  2. Halihallo Eddie

    Die Formatierungen sind dabei das geringste Problem, nur wie bekomme ich raus (serverseitig, nicht per JavaScript!), in welcher Zeitzone der User sitzt?

    Gar nicht, oder nur unzuverlässig. Über eine Hostauflösung oder
    IP-Adresse liesse sich (wenn auch unzuverlässig) das Land auflösen,
    wobei dies nicht zu 100% funktioniert. Über das Land könnte man
    ggf. eine Zeitzoneneinordnung erreichen, wobei es Länder gibt, die
    über 4 Zeitzonen haben (sprich: die Lösung taugt nicht)! - Aber lass
    dies mal lieber, denn dies macht mehr Probleme als Nutzen.

    => Der Kunde bzw. der Client weiss selber am besten, wo er ist und
       somit Javascript:

    http://selfhtml.teamone.de/javascript/objekte/date.htm#get_timezone_offset
    Diesen Offset in Sekunden von GMT kannst du an dein Script
    übersenden. Die Sprache liesse sich Serverseitig über
    HTTP_ACCEPT_LANGUAGE auslesen.

    Gibt's da eine fertige PHP-Funktion, oder eine Servervariable?

    Nein.

    Viele Grüsse

    Philipp

    --
    The only program that runs perfectly every time, is a virus.
    1. Hallo allerseits,

      http://selfhtml.teamone.de/javascript/objekte/date.htm#get_timezone_offset

      Diesen Offset in Sekunden von GMT kannst du an dein Script
      übersenden.

      Mmmh, ok. Jetzt habe ich nur noch das Problem der Umrechnung:
      "2001-04-25 19:00:00" (Serverzeit)
      "2001-04-26 01:00:00" (Bangkok, neuer Tag!)
      und
      "2001-04-25 03:00:00" (Serverzeit)
      "2001-04-24 21:00:00" (NewYork, alter Tag!)

      Gibt's da eine passende Funktion? Ich habe unter obigem Link nichts gefunden. Was ich brauche ist etwas in der Art
      myDate.addHours(5);
      Oder muss ich mir auch den Algorithmus selber schreiben?

      Danke für eure Hilfe,
      Eddie

      --
      Old men and far travelers may lie with authority.
      1. hi,

        Was ich brauche ist etwas in der Art
        myDate.addHours(5);

        schau dir strtotime() an.

        gruss,
        wahsaga

        1. Was ich brauche ist etwas in der Art
          myDate.addHours(5);

          schau dir strtotime() an.

          Es wär weitaus sinniger, gleich aus der Datenbank die Unix-Zeit auszulesen und diesen Wert dann in Javascript mit Date.setTime() weiter zu verwenden, anstatt die Datenbank erst einen Zeittext erzeugen zu lassen, der dann von PHP wieder in eine Zahl umgewandelt werden muß:

          [SQL] select unix_timestamp(zeit) ...

          Ergebnis in die PHP-Variable $zeit verfrachten, dann:

          [PHP] echo "var zeit = new Date(); zeit.setTime(".($zeit*1000)."); document.write(zeit.toLocaleString());";

          (<script> und <noscript> der Übersichtlichkeit halber weggelassen)