Schaltjahr - Quartal - Jahreszeit

von Thomas Salvador.

In diesem Artikel finden Sie weitere Routinen, die mit dem Datum arbeiten.

Schaltjahr

Zwar kann die Tag des Jahres Routine benutzt werden, um zu entscheiden, ob das Datum in einem Schaltjahr liegt oder nicht, sinnvoller ist es hier jedoch, dies direkt zu machen:

function isLeapYear(y) {
  return ((y % 4 == 0) && ((y % 100!= 0) || (y % 400 == 0)));
}

In dieser Form brauchen wir Tag des Jahres und damit die Julian Operation nicht (und die Ausführung dieses Fragmentes ist auch schneller):

Ein Jahr y ist also ein Schaltjahr, wenn die Jahreszahl durch 4, nicht aber durch 100 ohne Rest teilbar ist. Ist die Jahreszahl durch 400 ohne Rest teilbar, so ist es ein Schalt jahr, obwohl eine durch 400 teilbare Zahl insbesondere durch 100 teilbar ist.

Wie Sie wissen, dient der Schalttag 29. Februar dazu, Abweichungen des Kalenders von der tatsächlichen Jahreslänge auszugleichen. Die beiden zusätzlichen Bedingungen sind notwendig, weil "Schalttag jedes 4. Jahr" noch immer viel zu ungenau wäre.

Beispiel

<script type="text/javascript"><!--
var now = new Date();
document.write('1996 ist leap? ', isLeapYear(1996), '<br>');
document.write('1997 ist leap? ', isLeapYear(1997), '<br>');
document.write('1900 ist leap? ', isLeapYear(1900), '<br>');
document.write('2000 ist leap? ', isLeapYear(2000), '<br>');
document.write('Derzeit sind wir in einem Schaltjahr? ');
document.write(isLeapYear(now.getFullYear()));
// -->
</script>

liefert

Quartal

Das Quartal lässt sich freilich allein aus dem Monat bestimmen, den die Methode getMonth() liefert:

function getQuarter(t) {
  return Math.floor(t.getMonth() / 3)+1;
}

Die Routine getQuarter() liefert entsprechend Werte im Bereich von 1 bis 4.

Beispiel

<script type="text/javascript"><!--
var now = new Date();
document.write(now.toString(), ' liegt im ', getQuarter(now), '. Quartal');
//-->

liefert

Jahreszeit

Zur Bestimmung der Jahreszeit brauchen wir noch den genauen Tag und Monat, den getDate() und getMonth() liefern. Auch diese Implementierung ist naheliegend:

function getPeriod(t) {
  var m = t.getMonth()+1;
  var d = t.getDate();
  if ((m < 3)
    || ( (m == 3) && (d < 20) )
    || ( (m == 12) && ( d > 20))) {
    return 0;
  } else {
    if ((m < 6) || ( (m == 6) && (d < 21))) {
      return 1;
    } else {
      if ((m < 9) || ((m == 9) && (d < 23))) {
        return 2;
      } else {
        return 3;
      }
    }
  }
}

Die Routine getPeriod() liefert Werte von 0 für Winter bis 3 für Herbst.

Die naheliegende Verwendung ist natürlichsprachlich. Dazu schaffen wir ein Feld mit den Namen des Jahreszeiten:

var perNames = new Array('Winter', 'Fr&uuml;hling', 'Sommer', 'Herbst');

Die Verwendung erfolgt analog zur "natürlichsprachlichen Darstellung des Datums":

Beispiel

<script type="text/javascript"><!--
  var now = new Date();
  var perNames = new Array(
    'Winter', 'Fr&amp;uuml;hling', 'Sommer', 'Herbst'
  );

  document.write(now.toString(), ' liegt im ',
  perNames[getPeriod(now)]);
// -->
</script>

liefert

Der Grund dafür, dass getPeriod() nicht direkt den Namen liefert, ist einfach der, dass man ja nicht unbedingt (nur) den Namen darstellen will. So würde beispielsweise

<script type="text/javascript"><!--
var now = new Date();
document.write('&lt;img src="p',getPeriod(now),'.gif"&gt;');
//-->
</script>

dazu führen, dass je nach Jahreszeit die Bilder p0.gif bis p3.gif angezeigt werden. Man hat so viel mehr Freiheit und kann mit den Ergebnissen machen, was man möchte.