Alexander (HH): Zeitzone wählen für Benutzer

Beitrag lesen

Moin Moin!

Nee, brauchst Du nicht. Da ist Javascript glücklicherweise mal vorausschauend genug gebaut.

Hm, ich weiß nicht, ob es das einfachste Umsetzung ist... Vielleicht mal kurz kommentieren.

[...]

Jetziger Weg (benötigt jquery):

<?php

define("TS", time());
function GetDateTime($time = TS){

return "<span id='usertimestamp'>$time</span>";

}
?>


>   
> Inkludierte JS-Datei im Header:  
> ~~~javascript
  

> $(function(){  
>   
>   $("#usertimestamp").each(function(){  
>     var timestamp = $(this).html();  
>     dateobj = new Date(timestamp*1000);  
>     $(this).html(dateobj.toLocaleString());  
>   });  
>   
> });

Ich denke, die HTML5-Puristen würden hier etwas in der Richtung <span class="timestamp" data-timestamp="1356998399">2012-12-31 23:59:59 UTC</span> generieren lassen, und in Javascript dann den Timestamp aus dem "data-timestamp"-Attribut herausfummeln, in ein "hübsches" Datum unrechnen und schließlich das innerHTML des span-Elements gegen das "hübsche" Datum austauschen.

Allerdings weiß ich jetzt gar nicht, was beim User dabei rauskommt. Bei mir steht da "Montag, 27. August 2012 16:40:30". Ich kriege es nicht zu "Monday" durch die Spracheinstellungen des OS. Denke, der Browser macht das irgendwie...

Richtig. Wenn Du Kontrolle über die Sprache und das Format haben willst, mußt Du Dir etwas in Richtung strftime() in Javascript bauen, kombiniert mit Listen von Monats- und Wochentagsnamen. AM/PM-Schweinereien nicht vergessen!

Etwas in dieser Richtung:

var translations={
  "de" : {
    "shortmonths" : [ "Jan","Feb","Mär","Apr", ... ],
    "longmonths" : [ "Januar","Februar","März", ... ],
    "shortdays" : [ "So","Mo","Di","Mi", ... ],
    "longdays" : [ "Sonntag","Montag","Dienstag", ... ],
    "shortdateformat" : "%Y-%m-%d",
    "longdateformat" : "%Y-%B-%d",
    "shorttimeformat" : "%H:%M",
    "longtimeformat" : "%H:%M:%S",
    ...
  },
  "en" : {
    ...
  }
};

Wenn Du serverseitig schon weißt, ob Du Deutsch oder Englisch benutzen willst, kannst Du Dir die oberste Ebene verkneifen und nur die für die jeweils gewählte Sprache passende Definition ausgeben. Oder Du gibst einmal die gesamte Übersetzungsdatenbank als statisches JS aus und setzt nur einmal in der Seite die aktuelle Sprache.

$ts = "1346078430";
$X = GetDateTime($ts);

Auch weiß ich nicht, wie ich jetzt für Benutzer die Möglichkeit  zulassen soll, dass sie individuelle Ausgabeformate definieren können. Beispiel "d.m.y  H:i:s". Zwar gibt es vom Date-objekt genug Methoden, aber dann müsste ich ein customized JS-Script für jeden Benutzer einbinden...

Nö, warum? Ein Javascript für alle. Welches Format Du annimmst, definierst Du über die Sprachauswahl, das Umrechnen in ein Datum übernimmt ein Nachbau von strptime() in Javascript. Oder Du nimmst eines der vielen Kalender- und Uhrzeit-Popups, läßt gar keine direkte Eingabe zu, und läßt das Popup direkt den Timestamp-Wert setzen.

strftime() und strptime() mußt Du nicht vollständig implementieren, die einbuchstabigen Kürzel sollten mehr als ausreichend sein, insbesondere %E... und %O... kannst Du auslassen. Und bevor Du das Rad neu erfindest, solltest Du mal suchen, ob sich schon jemand die Mühe gemacht hat.

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".