Datumsfunktionen


Das Objekt Date aufrufen

Anders als z.B. das Objekt Math muß das Objekt Date aufgerufen ("eine Instanz erzeugt") werden, bevor Datumsberechnungen mit aktuellen Daten stattfinden können. Beim Aufruf wird das aktuelle Datum mit der Uhrzeit zusammen einer Variablen zugewiesen, deren Name frei wählbar ist, deren Inhalt aber mit dem erfolgten Aufruf festliegt, die Zeit läuft also im Variablenwert nicht weiter. Wenn Datums- bzw. Zeitrechnungen beabsichtigt sind, beginne man das JavaScript mit dem folgenden Eintrag. 'datum' ist hier der Variablenname, er könnte auch 'Xanthippe' heißen:

datum = new Date();

Danach kann auf das Datum zugegriffen werden. Im Kopf dieser Seite ist das aktuelle Datum zu sehen. Die erste Anzeige wurde erreicht, indem nach der Überschrift mit dem <script>-Tag die folgende Codezeile eingefügt wurde:

document.write(datum);

Interessant ist die Schreibweise des Datums, wie sie durch new Date() erzeugt wird. Hier tut jeder Browser im Verein mit dem Betriebssystem, was er will. Die Zeitzonenangabe erinnert daran, daß JavaScript für das Internet erfunden wurde.
Die zweite Zeile zeigt das sogenannte lokale Datum. Zu deren Erzeugung wurde eingetragen:

document.write(datum.toLocaleString());

Was da auf Ihrem Browser angezeigt wird, soll von der Ländereinstellung Ihres Rechners abhängen. Aber von welcher?


Methoden zur Datums- und  Zeitbestimmung

Datum und Berechnungswerte
getDate()Tag ermitteln
getYear()Jahr ermitteln, ggf. Jahr-1900
getFullYear()Jahreszahl komplett ermitteln
getMonth()Monatsnummer ermitteln, 0..11
getDay()Wochentagsnummer ermitteln
setDate()Tag setzen, 1... 31
setYear()Jahr setzen, 0..99 oder 19xx etc.
setMonth()Monat setzen, 0...11
Date.parse(datum)direkt von Date abzuleiten, Millisekunden zwischen dem 1.1.1970 und datum, als Zeichenkette angegeben, hier 1.1.2000
toGMTString()Zeitpunkt in GMT-Format konvertieren
toLocaleString()Zeitpunkt in lokales Format konvertieren
Date.UTC(y,m,d,h,min,s)direkt von Date abzuleiten, GMT-Zeit seit dem 1.1.1970 ermittelt , einzugeben Zahlwerte für year, etc., Eingabe des Monats abweichend mit 0... 11! gleiches Datum wie bei parse!
 
Uhrzeit
getTime()Zeitpunkt ermitteln, ms seit dem 1.1.1970
getHours()Stundenteil der Uhrzeit ermitteln
getMinutes()Minutenteil der Uhrzeit ermitteln
getSeconds()Sekundenteil der Uhrzeit ermitteln
getTimezoneOffset()Zeitzonenabweichung der Lokalzeit gegen GMT (Greenwich Mean Time) in Minuten ermitteln
setTime()Uhrzeit setzen
setHours()Stunden der Uhrzeit setzen
setMinutes()Minuten der Uhrzeit setzen
setSeconds()Sekunden der Uhrzeit setzen

Die Aufrufe, die in beiden Tabellen die rechte Spalte mit aktuellen Werten füllen, sollen kurz erläutert werden. Die get-Methoden gelten alle für den Aufrufzeitpunkt der Seite. Diese Aufrufe lauten (am Beispiel des ersten gezeigt):

<script>document.writeln(datum.getDate())</script>

Die set-Methoden werden auf eine Instanz des Date-Objektes angewandt, die nicht etwa die Systemzeit des Rechners verstellt, sondern dazu dient, Zeitdifferenzen berechnen zu können. Damit löst man so wichtige Fragen, wie z. B. die nach dem Zeitabstand zwischen Seitenaufruf und dem Jahrtausendwechsel. Um die Eingabebedingungen zu testen, sind Eingaben und Ergebniswerte gegeneinander gestellt. Die Aufrufe sind entsprechend modifiziert:

<script>neudat.setDate(5);document.write("5 / " + neudat.getDate());</script>

Datumsberechnungen

Wie lange schon?

Wie lange leben wir nun im 3. Jahrtausend? Eine gültige Anzeige müßte dauernd erneuert werden. Deshalb bestimmen wir die Zeit beim Tastendruck:

Was, Sie wundern sich? Demnach gehören Sie auch zu den Leuten, die beim Zählen ihrer Finger mit "0" anfangen und erstaunt sind, wenn ihnen einer fehlt.
Die Funktion für die letzte Berechnung will ich ihnen ruhig hier zeigen:

<script language=JavaScript> 
   function Diff() 
   { 
      jetzt =new Date(); 
      gesamt=Date.parse(jetzt.toGMTString())-Date.parse("1 Jan 2001 00:00:00 GMT"); 
      tage=Math.floor(gesamt/(24*3600*1000)); 
      stunden=Math.floor((gesamt-24*3600*1000*tage)/(3600*1000)); 
      minuten=Math.floor((gesamt-24*3600*1000*tage-3600*1000*stunden)/(60*1000)); 
      sekunden=Math.round((gesamt-24*3600*1000*tage-3600*1000*stunden-60*1000*minuten)/1000); 
      alert("Es sind bereits "+tage+" Tage, "+stunden+ " Stunden, "+minuten+" Minuten und "+sekunden+ " Sekunden\nim neuen Jahrtausend vergangen!"); 
   } 
</script>

Zur Erläuterung: Bei der Bestimmung der Gesamtzeit (gesamt in ms) wird die Umwandlung in GMT verlangt. Ein Test ergab allerdings, daß JavaScript ohnehin mit GMT rechnet. Das ist deshalb von Bedeutung, weil die lokale Zeit ja mit Sommerzeit-Problemen behaftet ist. Komisch ist allerdings, daß die Anzeige der frischen Date-Instanz (erste Zeile dieser Seite) bereits in  lokaler Zeit erfolgt.


Zeitberechnung

Wie lange ist der Nutzer schon auf der Seite?

Es ist evtl. nützlich, aber wiederum nicht unbedingt ratsam, dem Leser anzuzeigen, wie lange er auf meiner Seite weilt. Es geht, wenn man es denn will, um die Berechnung der Zeitdifferenz zwischen Öffnen der Seite und dem laufenden Zeitpunkt.
Im Head-Teil der Seite, bei Frame-Strukturen im Index- oder Menüteil wäre einzutragen:

<script language=JavaScript> 
   var  start = new Date(); 
   function zeitzeigen() 
     { 
     nun = new Date(); 
     zeit=(nun.getTime() - start.getTime())/1000; 
     stunden=Math.floor(zeit/3600); 
     minuten=Math.floor((zeit-3600*stunden)/60); 
     sekunden=Math.round(zeit-3600*stunden-60*minuten); 
     window.document.zeitformular.zeitbox.value = stunden + " h " + minuten +" min " + sekunden + " s"; 
     window.setTimeout('zeitzeigen()',1000);
     } 
   window.setTimeout('zeitzeigen()',1000);
</script>

Kurzer Kommentar. Es wird das Startdatum ermittelt, weil es später als Bezug gebraucht wird. Dann folgt eine Funktionsdefinition. Schließlich wird ein Timer gestartet, der nach einer Sekunde die Funktion aufruft. Diese ermittelt  und schreibt nun die abgelaufene Zeit. Wohin? Nuh dah, würde der Sachse sagen und was anderes meinen:

<form name="zeitformular"> 
   Sie sind erst <input size=15 name="zeitbox"> auf dieser Seite!
</form> 
Sie sind erst  auf dieser Seite!

Nun darf man ja mal über Umständlichkeiten nachdenken. Geht es nicht auch einfacher? Da der Timer im Sekundentakt arbeiten kann, kann der Zähler auch ohne das Datumsobjekt arbeiten. Wie sähe es dann aus? Ganz gut, allerdings geht die neue Zählung etwas nach. Obwohl die neue Wartezeit sofort am Funktionsbeginn eingeläutet wird, bleibt dieser Zähler zurück. Ein Nutzer, der nur diesen vorfindet, würde das allerdings kaum merken.

Sie sind erst  auf dieser Seite!
<script language=JavaScript>
   var stunde=0; 
   var minute=0; 
   var sekunde=1; 
   function zaehle() 
   { 
      window.setTimeout('zaehle()',1000);   
      sekunde++; 
      if (sekunde==60){sekunde=0;minute++;}
      if (minute==60){minute=0;stunde++;}
      window.document.zeitformular2.zeitbox2.value = stunde + " h "+minute+" min " + sekunde + " s";   
   } 
   window.setTimeout('zaehle()',1000);   
</script>