|
Das Objekt Date aufrufenAnders 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 folgendenEintrag. 'datum' ist hier der Variablenname, erkönnte auch 'Xanthippe' heißen:
Danach kann auf das Datum zugegriffen werden. Im Kopf dieserSeite ist das aktuelle Datum zu sehen. Die erste Anzeigewurde erreicht, indem nach der Überschrift mit dem<script>-Tag die folgende Codezeile eingefügtwurde:
Interessant ist die Schreibweise des Datums, wie sie durchnew Date() erzeugt wird. Hier tut jeder Browserim Verein mit dem Betriebssystem, was er will. Die Zeitzonenangabeerinnert daran, daß JavaScript für das Interneterfunden wurde.
Die zweite Zeile zeigt das sogenannte lokale Datum. Zu derenErzeugung 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> |
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.
<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> |
|
|
|