New York befindet sich in der "Eastern Time", das bedeutet, die Uhrzeit liegt 6 Stunden hinter der MEZ. Ist es in Geilenkirchen z.B. 15.00 Uhr, so ist es in New York erst 9.00 Uhr morgens. Der Offset zur Greewich-Zeit beträgt für New York -5 Stunden.
Die hier angewendete und weiter unten erklärte Lösung nimmt Greenwich-Zeit als Berechnungsbasis. Zuerst wird die lokale Zeit des Rechners (der irgendwo auf der Welt steht und die HTML-Seite anzeigt) und der Offset zur Greenwich-Zeit ermittelt. Erst dann wird der eingetragene Wert für die Zeitverschiebung zwischen Greenwich und Zielort berücksichtigt.
Den Offset-Wert für die Zeitverschiebung in einer Variable festlegen. Ich nehme hier -5 als Zeitverschiebung von Greenwich zu New York
|
// Zeitoffset Irgendwo zu Greenwich
var Offset = -5;
|
anzeigen
|
Erst einmal zur Kontrolle den Stundenwert auf dem lokalen Rechner auslesen
|
// zur Kontrolle lokaler Stundenwert
var DatumZeitLokal = new Date();
var StdLokal = DatumZeitLokal.getHours();
|
anzeigen
|
Den Unterschied Lokal : Greenwich-Zeit ermitteln
|
// Unterschied lokale Zeit zu Greenwich
var Unterschied = DatumZeitLokal.getTimezoneOffset() / 60;
|
anzeigen
|
Die gesamte Zeitverschiebung "Lokal" zu "Irgendwo" aus dem Unterschied zur Greenwich-Zeit und dem eingetragenen Offset ermitteln
|
// Gesamtverschiebung zu Irgendwo (Unterschied + Offset)
var Verschiebung = Unterschied + Offset;
|
anzeigen
|
Weil man damit leichter rechnen kann, den absoluten Wert für den lokalen Datum-Zeit-Wert in Millisekunden ermitteln.
|
// Datum-Zeit-Wert absolut in Millisekunden
var AbsolutLokal = DatumZeitLokal.getTime();
|
anzeigen
|
Zu dem lokalen Datum-Zeit-Wert in Millisekunden die oben errechnete gesamte Zeitverschiebung hinzuzählen. Weil ich die gesamte Zeitverschiebung als Stundenwert ermittelt hatte, wird der hier eingesetzte Wert mit 3 600 000 multipliziert [ms / Std]
|
// Datum-Zeit-Wert Irgendwo in Millisekunden
var AbsolutIrgendwo = AbsolutLokal + (Verschiebung * 60 * 60 *
1000);
|
anzeigen
|
Den nun ermittelten Wert kann man in eine Datumsvariable schreiben (setTime). Dieser neue Datum-Zeit-Wert kann ganz einfach im UTC-Format zur Kontrolle angezeigt werden.
|
// Werte für DatumZeit neu setzen
ZeitIrgendwo.setTime(AbsolutIrgendwo);
|
anzeigen
|
Mit dieser 'selbst gefüllten' Datums-Variablen 'ZeitIrgendwo' kann man nun alles 'anstellen', was JavaScript mit einer Datums-Variablen erlaubt. Also ist es auch möglich den Stundenwert auszulesen und für die Miniuhr einzusetzen.
|
// Stundenwert entnehmen
var StdIrgendwo = ZeitIrgendwo.getHours();
|
anzeigen
|
Wenn ich den selbst gewählten Offset mit -5 so gwählt hatte, dass die Zeit für New York dabei herauskommen muss, sollte der Stundenwert für New York angezeigt werden.
|
So weit so gut. Aber ...
Weil der Unterschied zwischen der lokalen Zeit und der Greenwich-Zeit unterschiedlich sein kann (Sommerzeit / Winterzeit), kann der gesamte Zeitunterschied zwischen dem lokalen Rechner und der Zeit 'Irgendwo' um eine Stunde verfälscht angezeigt werden.
Folglich muss entweder eine automatisierte oder manuelle Korrektur vorgesehen werden. Hier eine Option zur Korrektur mittels Checkbox (Auch die Demo funktioniert).
|
// Sommerzeit Korrektur Kontrolle der checkbox
if (document.getElementById("Sommer").checked == true)
{
Verschiebung = Verschiebung + 1;
}
|
anzeigen
|
Da die Check-Box ohnehin in der sekündlichen Schleife geprüft wird, erscheind das korrigierte Ergebnis im nächsten Durchlauf. Der um eine Stunde abweichende Wert wird gleich angezeigt.
|