JavaScript: Einführung in Datum und Zeit

von Thomas Salvador.

JavaScript bietet das Objekt Date an, welches die Grundlage unserer Betrachtungen zu Datum und Zeit ist. Um das jeweils aktuelle Datum und die jeweils aktuelle Zeit zu erhalten, vereinbaren wir

<script type="text/javascript">
var now = new Date();
</script>

Dies schafft ein neues Date-Objekt und bindet es an die Variable now.

Date bietet Methoden, die zur Abfrage der einzelnen Teile dienen, dies sind u.a.

toString()
welches eine String-Darstellung des repräsentierten Datums erzeugt.
getDate()
liefert den Tag.
getMonth()
liefert den Monat. Beachten Sie bitte, dass der Wert von 0 für Januar bis 11 für Dezember reicht.
getYear()

liefert das Jahr-1900, also die 19xx als zweistellige Jahreszahl, spätere Werte sind > 100, frühere < 0.

getFullYear()
liefert das Jahr vierstellig.
getDay()
liefert den Wochentag (day of week), mit einem Wert von 0 für Sonntag bis 6 für Samstag.
getHours();
liefert die Stunde im 24 Stunden-Modell.
getMinutes();
liefert die Minuten.
getSeconds();
liefert die Sekunden.

Wenn Sie sich wundern, warum getYear() eher komisch als Jahrezahl-1900 definiert ist, das war so nicht geplant.

Eigentlich sollte sie das Jahr liefern, zweistellig für 19xx und vierstellig für 2xxx. Also z.B. 97 für 1997 und 2002 für 2002.

Leider hatte sich sogar in einige verbreitete Browser bzw. Browserversionen ein Fehler eingeschlichen und sie waren nicht Jahr-2000 fest.

Welche das sind und mit welchem Workaround Sie diesen Bug fixen und Ihre Scripte auf allen Browsern lauffähig machen können, habe ich in Y2K-BugFix für JavaScript beschrieben.

Aus diesem Grunde wurde die Funktion getYear() dann umdefiniert, dass sie Jahr-1900 als Ergebnis hat, und getFullYear() eingeführt, die stets das vierstellige Jahr liefert.

Beispiel:

<script type="text/javascript">
<!--
  var now = new Date();
  document.write('now.toString() liefert ', now.toString(), '<br>');
  document.write('now.getDate() liefert ', now.getDate(), '<br>');
  document.write('now.getMonth() liefert ', now.getMonth(), '<br>');
  document.write('now.getYear() liefert ', now.getYear(), '<br>');
  document.write('now.getFullYear() liefert ', now.getFullYear(), '<br>');
  document.write('now.getDay() liefert ', now.getDay(), '<br>');
  document.write('now.getHours() liefert ', now.getHours(), '<br>');
  document.write('now.getMinutes() liefert ', now.getMinutes(), '<br>');
  document.write('now.getSeconds() liefert ', now.getSeconds(), '<br>');
// -->
</script>

liefert

Beachten Sie hier bitte unbedingt die Ausgabe von getMonth().

Diese Methoden sind alles, was wir brauchen, um unsere Datumsausgaben zu formatieren.

Bei der Schaffung eines Objektes können Werte direkt gesetzt werden:

var test = new Date();
ist das, was wir schon gesehen haben und schafft ein Objekt, welches das aktuelle Datum und Zeit trägt.
test = new Date(jahr, monat, tag);
schafft ein Objekt, welches das entsprechende Datum trägt. Beachten Sie bitte, dass monat in der von getMonth() gelieferten Fassung benutzt wird, d.h. mit Wertebereich 0..11 (also zum Beispiel 3 für April).
var test = new Date(jahr, monat, tag, stunde, minute, sekunde);
ist der große Bruder des eben genannten. Das Date-Objekt kann auch die Uhrzeit tragen.

Das jahr wird dabei so interpretiert, wie es setYear() tun würde. Ein zweistelliger Wert führt zu 1900+jahr, alles andere zu jahr selbst.

new Date(1999,1,1); // jahr 1999
new Date(99,1,1);   // jahr 1999
new Date(101,1,1);  // jahr 101
new Date(-1,1,1);   // jahr -1

Das Date-Objekt bietet noch einige andere Methoden an, die wir hier noch rasch betrachten wollen:

getTime()
liefert die Anzahl der Millisekunden, die zwischen dem 01.01.1970 00:00:00 und dem getragenen Zeitpunkt vergangen sind. (Diese Darstellung ist übringens sehr verbreitet, und ermöglicht z.B. ein einfaches Rechnen mit Daten.
getTimeZoneoffset()
liefert in Minuten den Zeitunterschied zwischen lokaler Zeit und GMT.
parse(string)

liefert die Anzahl der Millisekunden, die zwischen dem 01.01.1970 00:00:00 und dem als Zeichenkette übergebenen Zeitpunkt vergangen sind. Die Darstellung in der Zeichenkette muss dem IETF-Standard folgen, d.h.

  tagesk&uuml;rzel, tag monatsk&uuml;rzel jahr stunde:minute:sekunde zeitzone
  z.B. Wed, 9 Apr 1997 06:45:00 GMT+0100
toGMTString()
liefert eine den getragenen Zeitpunkt repräsentierende Zeichenkette im eben genannten IETF-Standard.
toLocaleString()
liefert eine den getragenen Zeitpunkt repräsentierende Zeichenkette. Hierbei wird die lokale Zeit berücksichtigt. eben genannten IETF-Standard.
UTC(jahr, monat, tag)
UTC(jahr, monat, tag, stunde)
UTC(jahr, monat, tag, stunde, minute)
UTC(jahr, monat, tag, stunde, minute, sekunde)
liefert die Anzahl der Millisekunden, die zwischen dem 01.01.1970 00:00:00 und dem angegebenen Zeitpunkt vergangen sind. Werden stunde, minute bzw. sekunde nicht angegeben, so werden sie als 0 angenommen. Damit meinen beispielsweise UTC(jahr, monat, tag) und UTC(jahr, monat, tag, 0, 0, 0) Gleiches.

Schließlich (und damit kommen wir wirklich zum Ende der Einführung) können einzelne Werte gesetzt werden, d.h. zu den (meisten) getXXX gibt es ein entsprechendes setXXX:

setDate(tag)
setzt den Tag des getragenen Zeitpunktes auf tag. Wertebereich 1..[28-31].
setMonth(monat)
setzt entsprechend den Monat. Wertebereich 0..11.
setYear(jahr)
setzt das Jahr auf 1900+jahr, wenn jahr zweistellig ist, sonst auf jahr.
setFullYear(jahr)
setzt entsprechend das Jahr auf genau diesen Wert jahr, ohne Sonderbehandlung.
setHours(stunde)
setzt die Stunde. Wertebereich 0..23 (24 Stunden Modell).
setMinutes(minute)
setzt die Minuten
setSeconds(sekunde)
setzt die Sekunden
setTime(millisekunde)
stellt den getragenen Zeitpunkt so ein, dass er den Zeitpunkt repräsentiert, der millisekunde Millisekunden nach dem 01.01.1970 00:00:00 liegt.

Ich empfehle Ihnen die Verwendung von getFullYear() und setFullYear() für neue Skripte. Um die (besondere) Bedeutung der zweistelligen Werte bei Konstruktion zu umgehen, könnten Sie entweder mit einem Datumsstring arbeiten, oder direkt setFullYear() auf das erzeugte Objekt anwenden.