von Thomas Salvador.
Dieser Artikel setzt unsere Betrachtungen von Datum und Zeit in JavaScript fort und liefert Funktionen zur Berechnung des Julianischen Datms, eine allgemeine Tage des Jahres- und eine allgemeine Tag des Jahres-Funktion.
Um aus dem gregorianischen Datum das julianische Datum zu bestimmen, können Sie folgendes Fragment benutzen:
function ymd2julian(y, m, d) {
if (m < 3)
var f = -1;
else
var f = 0;
return Math.floor((1461*(f+4800+y))/4)
+ Math.floor(((m-2-(f*12))*367)/12)
- Math.floor(3*Math.floor((y+4900+f)/100)/4)
+ d
- 32075;
}
Beachten Sie bitte, dass ymd2julian() mit den 'normalen'
Wertebereichen 1..12 für Monat und '4-stelligen Jahreszahlen', d.h.
mit 1997 für 1997, arbeitet (97 ist hier das Jahr 97). Wir schaffen
noch eine Schnittstelle zur JavaScript-Darstellung:
function getJulian(t) {
return ymd2julian(t4(t.getYear()),
t.getMonth()+1,
t.getDate());
}
Beispiel:
<script type="text/javascript"><!-- var now = new Date(); document.write(now.toString(), ' ist auch bekannt als ', getJulian(now)); // --> </script>
liefert
|
Mit Hilfe des julianischen Datums können wir eine allgemeine DOY (day of year) Routine implementieren:
function doy(y,m,d) {
return ymd2julian(y,m,d)-ymd2julian(y,1,1)+1;
}
Es ist ein wesentlicher Vorteil der Julianischen Daten, dass Sie Rechnungen mit Daten sehr einfach machen. Julianische Daten sind fortlaufend. Hat das heutige Datum das Julianische Datum a, so hat der morgige Tag das Julianische Datum a+1.
Nehmen wir nun das Julianische Datum des angefragten Datums dd.mm.yyyy und ziehen davon das Julianische Datum des 1. Januars des Jahres ab, in dem das Datum liegt, 01.01.yyyy, so bleibt der um Eins verminderte doy übrig. Der erste Tag eines Jahres hätte so die Nummer 0, denn julian(01.01.yyyy) - julian(01.01.yyyy) ist 0.
Wir erhöhen also die Differenz einfach um Eins, um die Werte in die für uns gewohntere, bei Eins beginnende Zählweise zu bringen. Fertig ist unsere allgemeine Day-of-year-Funktion.
Auch hier eine Schnittstelle zu JavaScript:
function getDoy(t) {
return doy(t4(t.getYear()), t.getMonth()+1, t.getDate());
}
Beispiel:
<script type="text/javascript"><!-- var now = new Date(); document.write(now.toString(), ' ist der ', getDoy(now)); document.write('. Tag des Jahres ', (t4(now.getYear()))); // --> </script>
liefert
|
Mit Hilfe des julianischen Datums können wir eine allgemeine DOW (day of week)
Routine implementieren. Der Unterschied zu getDay() liegt darin, dass
die folgende Routinen mit jedem Datum fertig wird und nicht nur mit dem recht eingeschränkten
Bereich der in JavaScript darstellbaren.
function dow(y,m,d) {
return ((ymd2julian(y,m,d) % 7) + 1) % 7;
}
Das sieht ggf. etwas abenteurlich aus. Der Tag der Woche ist einfach das
julianische Datum modulo 7. Dies liefert also Werte zwischen 0 und 6, allerdings
in der Bedeutung von 0 für Montag bis 6 für Sonntag. Die Erhöhung
und erneute Restbildung bildet auf JavaScript-Verhältnisse ab. Diese Form
erspart und eine Hilfsvariable und eine if-then-else-Unterscheidung.
Beispiel:
<script type="text/javascript"><!-- document.write('Der 9. April 1997 war ein ', dayNames[dow(1997,4,9)], '.'); // --> </script>
liefert
|
Eine weitere Hilfsfunktion berechnet den Tag der Woche auf Basis eines Julianischen Datums. Dies dient nur dazu, dass ggf. redundante Berechnung dieses entfallen kann.
function julianDow(j) {
return ((j % 7) + 1) % 7;
}
Beispiel:
<script type="text/javascript"><!-- var dayNames = new Array('Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'); var aJulian = ymd2julian(1997,4,9); document.write('Der 9. April 1997 (oder ', 'wie die Julianer sagen: ', aJulian, ') war ein ', dayNames[julianDow(aJulian)], '.'); // --> </script>
liefert
|
