SELFHTML/Quickbar  Dynamisches HTML  Lösungen für die Praxis


Datums-/Uhrzeitanzeige

Diese Seite ist ein Dokument mit Informationstext

 Datums-/Uhrzeitanzeige - das Beispiel

 

MS IE 4.0Netscape4.0 Datums-/Uhrzeitanzeige - das Beispiel

Beispiel Anzeigebeispiel: So sieht's aus

Dieses Beispiel zeigt, wie Sie eine laufende Uhr, die Sie beliebig formatieren können, so realisieren können, daß sie sowohl auf dem MS Internet Explorer ab V4.0 als auch auf Netscape ab V4.0 funktioniert.

Hinweis: Zur besseren Orientierung enthält das Beispiel Verweise zu den entsprechenden Erläuterungen, z.B. 1*. Diese Verweise gehören nicht zum Quellcode. Falls Sie das Beispiel in einen Editor kopieren, müssen Sie diese Verweise löschen. Andernfalls erhalten Sie JavaScript-Fehlermeldungen.

Beispiel:

<html>
<head>
<style type="text/css">
all.Uhr { font-family:Century Gothic,Arial; font-size:36pt; color:blue; }
</style>
2* <script language="JavaScript">
<!--
 Wochentagname =
 new Array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
function ZeitAnzeigen() 
{ 
 var Jetzt = new Date();
 var Tag = Jetzt.getDate();
 var Monat = Jetzt.getMonth() + 1;
 var Jahr = Jetzt.getYear();
 var Stunden = Jetzt.getHours();
 var Minuten = Jetzt.getMinutes();
 var Sekunden = Jetzt.getSeconds();
 var WoTag = Jetzt.getDay();
 var Vortag  = ((Tag < 10) ? "0" : "");
 var Vormon  = ((Monat < 10) ? ".0" : ".");
 var Vorstd  = ((Stunden < 10) ? "0" : "");
 var Vormin  = ((Minuten < 10) ? ":0" : ":");
 var Vorsek  = ((Sekunden < 10) ? ":0" : ":");
 var Datum = Vortag + Tag + Vormon + Monat  + "." + Jahr;
 var Uhrzeit = Vorstd + Stunden + Vormin + Minuten + Vorsek + Sekunden;
 var Gesamt = Datum + "<br>" + Wochentagname[WoTag] + "<br>" + Uhrzeit;

4* if(document.all)
   document.all.MicrosoftUhr.innerHTML = Gesamt;
 else if(document.layers)
  {
   document.NetscapeUhr.document.open();
   Gesamt = '<span class="Uhr")>' + Gesamt + '</span>';
   document.NetscapeUhr.document.write(Gesamt);
   document.NetscapeUhr.document.close();
  }

 window.setTimeout("ZeitAnzeigen()",1000);
}
// -->
</script>
</head>
<body bgcolor=#FFFFFF>

1* <div id="MicrosoftUhr" class="Uhr">
</div>

<layer id="NetscapeUhr">
</layer>

3* <script language="JavaScript">
<!--
window.setTimeout("ZeitAnzeigen()",1000);
// -->
</script>

</body>
</html>

Erläuterung:

Im Körper der HTML-Datei im Beispiel werden zwei leere Behälter definiert: ein <div>-Bereich und ein <layer>-Bereich (1*). Die id-Namen der beiden Bereiche sagen bereits alles über die Bedeutung der Bereiche. Der <div>-Bereich wird für den MS Internet Explorer definiert, der <layer>-Bereich für Netscape. Netscape kennt zwar beide HTML-Tags, stellt den <div>-Bereich aber in keiner Weise dar, weil dieser leer ist.

Die Beispieldatei enthält ferner zwei JavaScript-Bereiche. Der eine Bereich ist im Dateikopf notiert (2*), der andere unterhalb der beiden "Behälter" (3*). Im unteren JavaScript-Bereich passiert nichts weiter als der erste Aufruf der JavaScript-Funktion ZeitAnzeigen(), die im oberen Script-Bereich steht und für die Zeitanzeige verantwortlich ist. Der Aufruf erfolgt durch die Einbettung in eine setTimeout()-Methode um 1000 Millisekunden, also um eine Sekunde verzögert. Dies ist notwendig, da der MS Internet Explorer sonst eine merkwürdige Fehlermeldung bringt (Begründung dafür gibt es keine, das sind typische Probleme, die nur durch viel Herumprobieren zu lösen sind).

In dem JavaScript-Bereich, der im Dateikopf steht, wird gleich beim Einlesen ein global definierter Array für die deutschen Wochentage definiert. Darunter steht die Funktion ZeitAnzeigen(), die für die dynamische Datums-/Uhrzeitanzeige verantwortlich ist. Die Funktion ermittelt zunächst mit Hilfe des Date-Objekts die aktuelle Zeit. Mit Hilfe diverser Formatierbefehlen erzeugt sie dann eine Zeichenkette, die einen ordentlich Datums-/Uhrzeitdarstellung Konvention darstellt. Diese Zeichenkette wird in der Variablen mit dem Namen Gesamt gespeichert. All diese Dinge haben noch nichts mit der Anzeige zu tun und funktionieren problemlos mit beiden Browsern.

Die entscheidende Abfrage zur Unterscheidung der Browser erfolgt in den Anweisungen (4*):
if(document.all) und
else if(document.layers)
Es handelt sich um Abfragen, ob das betreffende Objekt existiert. Der MS Internet Explorer kennt das all-Objekt, das Layer-Objekt dagegen nicht. Netscape dagegen kennt das Layer-Objekt, aber nicht das all-Objekt. Ältere Browser, die keines dieser beiden JavaScript-Objekte kennen, gelangen in keinen der beiden Zweige.

Beim MS Internet Explorer ist die Sache relativ einfach. Mit der Eigenschaft innnerHTML des all-Objekts läßt sich jederzeit dynamisch der Inhalt eines HTML-Elements neu setzen. Mit document.all.MicrosoftUhr wird das Element angesprochen, das mit id= den entsprechenden Namen erhalten hat, also der <div>-Bereich. Die Eigenschaft innnerHTML bekommt einfach den Wert der Variablen Gesamt zugewiesen. Damit zeigt der Internet Explorer die aktuelle Uhrzeit in dem <div>-Bereich an.

Bei Netscape macht sich das Beispiel die Eigenschaft zu nutze, daß ein Layer eine Art Dokument im Dokument darstellt, in das man jederzeit mit Hilfe von document.write() neue Daten schreiben kann. Das Dokument im Dokument wird im Beispiel mit document.NetscapeUhr.document angesprochen. Dabei ist NetscapeUhr der Name, den der Layer bei id= erhalten hat. Ganz wichtig ist, daß zunächst document.open() notiert wird und am Ende document.close(). Ansonsten würde Netscape die Uhrzeitanzeige nicht jede Sekunde überschreiben, sondern fortlaufend hintereinander schreiben.

Leider übernimmt Netscape bei document.write() keine CSS-Style-Sheet-Angaben. Deshalb wird dynamisch innerhalb des document.write()-Befehls mit einem <span>-Tag die nötige Zuweisung nachgeholt. Alle Angaben, die zur Formatierung der Uhr gehören, stehen in einem Style-Sheet-Bereich im Dateikopf.

weiter: Verschiebbare Seitenelemente
zurück: Dynamisches Positionieren (Netscape)
 

SELFHTML/Quickbar  Dynamisches HTML  Lösungen für die Praxis

© 1998  Stefan Münz, muenz@csi.com