Uhr digital 02
    


Home

Ziffern Nr. 8  ScriptCode ZURÜCK SITEMAP  

 Digitale Uhr 02  (mit Zeitversatz)

Eine dynamische digitale Uhr mit einem Eingabefeld für den Zeitversatz (Zeitverschiebung). Das Beispiel der digitalen Uhr 01 wurde erweitert, um eine fremde Ortszeit anzuzeigen (z.B. für New York).

Eingesetzt werden Mini-Ziffern mit den Abmessungen 11 x 14 Pixel. Weitere Images für digitale Ziffern finden sie auf der Seite Digitale Uhr 01.

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. Als Zeitversatz muss also -6 eingetragen werden.


Die dynamische, digitale Miniuhr mit einem Zeitversatz zur lokalen Rechnerzeit!

Zeitversatz zur lokalen Zeit:  Std


   Das Formularfeld für die Eingabe

Damit dieses Beispiel anpassungsfähig bleibt, habe ich ein Eingabefeld für den Zeitversatz vorgesehen. Für die Zeit der Eingabe eines anderen Wertes für den Versatz musste ich einige Vorsichtsmaßnamen treffen, schließlich wird hier die Zeitanzeige beim Laden der Seite gestartet und der Wert für die Versatzzeit im Sekundenabstand dem Eingabefeld entnommen. Außerdem muss eine Prüfung der Eingabe erfolgen.
  • Sobald der Cursor in das Eingabefeld gesetzt wird, wird die Berechnung der Zeit und die Aktualisierung der digitalen Uhr angehalten.

  • Eine theoretisch denkbare Eingabe für die Zeitverschiebung von z.B. 99 musste abgefangen werden.

  • Ich musste verhindern, das eine Eingabe von -6 z.B. zu einer Zeit von 2 Uhr nicht einen negativen Stundenwert von - 4 (weniger als 0) ergibt.

  • Ich musste sicherstellen, das eine Eingabe von 8 z.B. zu einer Zeit von 23 Uhr Nachts nicht einen Stundenwert von 31 (mehr als 23) ergibt

  • Eine fehlende Eingabe im Eingabefeld (Eingabefeld leer) muss ebenfalls abgefangen werden, da der erwartete Wert in eine mathematische Berechnung einbezogen wird, wo man nicht mit 'Nichts' rechnen kann. Den Wert setze ich dann auf '0' (Null).



Die hier gezeigte Lösung ist nicht wasserfest wenn sie die angezeigte Zeit als lokale Zeit für New York deklarieren. Zeigt sie doch lediglich die Uhrzeit mit einer (vorerst) festen Vorgabe von -6 Std für den Zeitversatz an. Die angezeigte Zeit ist nur dann für New York korrekt, wenn das JavaScript auf einem Rechner in der MEZ-Zeitzone ausgeführt wird. Eine bessere Lösung würde statt der lokalen Rechnerzeit die Greenwich-Zeit als Berechnungsbasis nehmen.




   Logische Eingaben - der Weg zum Zeitversatz

Um die manuellen Eingaben für den Zeitversatz in einem logischen Rahmen zu halten, wird der Eingabewert durch 24 dividiert und mit dem Restwert der Berechnung weiter gearbeitet.

(Im Gegensatz zum Rechenzeichen "/" (geteilt durch) wo das Ergebnis einer Division zurückgegeben wird, liefert das Rechenzeichen "%" (Modulo) den Rest einer ganzzahligen Division).
var Zeitverschiebung = document.getElementById('versatz').value;
Zeitverschiebung = Zeitverschiebung % 24;
Angenommen der Unterschied zur lokalen Zeit beträgt -6 Stunden (minus 6 Std), dann könnte man vom aktuellen Stundenwert 6 Stunden abziehen.
var Zeitverschiebung = -6;
Std = Jetzt.getHours() + parseInt(Zeitverschiebung);
So weit so gut. Damit das auch jederzeit funktioniert muss dafür gesorgt werden, das keine Minuswerte oder Stundenwerte größer als 23 herauskommen. Daher 2 zusätzliche Zeilen:
if (Std > 23){Std = Std - 24;}
if (Std < 0){Std = 24 + Std;}



   Sommerzeit in Deutschland?

Während der 'Sommerzeit' hier in Deutschland müssten wir eine zusätzliche Stunde abziehen. Auch das könnte man mittels JavaScript bewerkstelligen. Dazu würde man zuerst ermitteln, wir ob wir hier bei uns 'Sommerzeit' haben. Das lässt sich leicht feststellen, wenn man untersucht ob unsere lokale Zeit eine Stunde (Winterzeit) oder zwei Stunden (Sommerzeit) von der Greenwich-Zeit abweicht.

Nur soviel vorweg: Da in den meißten Staaten der USA die dortige 'daylight saving time' von unseren europäischen Terminen der Zeitumstellung lediglich um eine Woche versetzt gilt, kann man das beinahe vernachlässigen.

Die bei uns geltende Umstellung auf die Sommer- und Winterzeit erfolgt in den USA und somit auch in New York ebenfalls. Allerdings erfolgt die Umstellung hier bei uns jeweils am ersten Sonntag im April und am letzten Sonntag im Oktober. In den Staaten beginnt die Sommerzeit bereits Ende März.

Während dieser Woche eilen wir den 'Yanks' (das ist liebevoll gemeint) um eine weitere Stunde voraus. Folglich hinken die uns während dieser Woche nicht 6 sondern 7 Stunden hinterher.


   Greenwich-Zeit

Die Differenz zur Greenwich-Zeit in Stunden ermittelt man mit
Jetzt=new Date();
var GreenwichOffset = Jetzt.getTimezoneOffset() / 60;
  • Sommerzeit in Deutschland? Dann ist der Offset zu Greenwich -2 Std
  • Winterzeit in Deutschland? Dann ist der Offset zu Greenwich -1 Std
Das könnte man nun in unsere Berechnung zusätzlich 'einbauen' und die zusätzliche Stunde während unserer Sommerzeit berücksichtigen.
var Zeitverschiebung = -6;
var GreenwichOffset = Jetzt.getTimezoneOffset() / 60;

if(parseInt(GreenwichOffset) < -2) {
Zeitverschiebung = Zeitverschiebung -1;
}

Std = Jetzt.getHours() + parseInt(Offset);
if (Std > 23){Std = Std - 24;}
if (Std < 0){Std = 24 + Std;}
Damit hätte man zumindest der zusätzlichen einstündigen Zeitverschiebung während der deutschen Sommerzeit Rechnung getragen. Es gibt allerdings auch in New York die Sommer- und Winterzeit. Würde die Umstellung zeitgleich erfolgen, könnte man die Korrektur weglassen.





   Überlegung: Automatische Änderung für die Sommerzeit

Wenn man nun genauere Datumsuntersuchungen (durch eine Funktion) anstellt, ließe sich die gegebenenfalls notwendige Korrektur automatisieren indem man die wirklichen Eckdaten der Zeitumstellung berücksichtigt und die zusätzliche Stunde in die Rechnung mit einbezieht (oder auch nicht).

Nach den mir bekannten Terminen der deutschen Zeitumstellung "vom letzten Sonntag im März bis zum letzten Sonntag im Oktober", liefert das JavaScript ohne zusätzliche Rechenoperation lediglich eine Woche lang (letzter Sonntag im März bis erster Sonntag im April) für New York falsche Zeitangaben.


Ein Script für eine weitere Anpassung müsste also die Informationen für den letzten Sonntag im März und den ersten Sonntag im April ermitteln und zusätzlich die Uhrzeit untersuchen (die Uhren werden ja um 2 bzw 3 Uhr umgestellt) und dann den Stundenwert korrigieren.

Eine Automatisierung der zu berücksichtigende Zeitverschiebung, hervorgerufen durch die unterschiedliche Terminierung des Beginns wäre also eine neue Herausforderung für einen Javascripter. Wenn ich dann einmal Zeit dazu habe ...








14.08.2007   

NACH OBEN