brauchbar.de - WebDesign, Programmierung,Development in HTML, CSS, Javascript, PHP, Perl und mehr

[ Startseite | Artikel : HTML · JavaScript · CSS · Perl · Usability · Sonstiges | Services | Über ]


verwandte Artikel und Seiten

JS: Julianisches Datum - Tag des Jahres - Tag der Woche

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.

Julianisches Datum

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

Ausgabe auf Ihrem Browser

Tag des Jahres

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

Ausgabe auf Ihrem Browser

Tag der Woche

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

Ausgabe auf Ihrem Browser

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

Ausgabe auf Ihrem Browser


Verwandte Artikel und Seiten



brauchbar web
Diese Site anlinken. Artikel zu CSS | HTML | JavaScript | Perl | Usability | Sonst. | nach Ausgabe.

Copyright © 1999-2015 Thomas Salvador und brauchbar.de . Alle Rechte vorbehalten. Gehostet bei all-inkl.
Reproduktion, ganz oder in Teilen, nur mit schriftlicher Zustimmung von Thomas Salvador. Impressum · Datenschutzerklärung · Kontakt.

zum Inhaltsverzeichnis der 8. Ausgabe.

Linken Sie bitte zu der festen Adresse http://www.brauchbar.de/wd/artikel/19.html .