|
a. Datumsdifferenzen
Nachdem eine Reihe von Algorithmen zur Berechnung einzelner Datümer oder Eigenschaften
vorgestellt worden sind, soll hier noch eine Prozedur zur Berechnung von Differenzen
erläutert werden. Grundsätzlich lassen sich zwei Formen unterscheiden: Zum Einen die
direkte Rechnung über Tag, Monat und Jahr und zum Anderen die vielleicht elegantere
Umrechnung über den Julianischen Tag. Für die erste Form sind die erforderlichen
Grundalgorithmen bereits vorgestellt worden, bis auf die Berechnung der Anzahl der
Tage eines Jahres:
Das ist nun wirklich eine banale Funktion, aber wenn sie oft benötigt wird, ist es
sinnvoll sie in dieser Form zu erstellen. Somit sind jetzt alle notwendigen Funktionen
vorhanden, um die Differenz zwischen zwei Datümern auf der Basis Tag / Monat / Jahr
zu berechnen.
function Tage_von_bis(a_tag,a_monat,a_jahr,b_tag,b_monat,b_jahr) {
var anz = 0;
var a_Tage = Tag_des_Jahres(a_tag,a_monat,a_jahr);
var b_Tage = Tag_des_Jahres(b_tag,b_monat,b_jahr);
if ((a_jahr > b_jahr) || ((a_jahr == b_jahr) && (a_Tage > b_Tage))) {
c_tag = a_tag; c_monat = a_monat; c_jahr = a_jahr;
a_tag = b_tag; a_monat = b_monat; a_jahr = b_jahr;
b_tag = c_tag; b_monat = c_monat; b_jahr = c_jahr;
}
if (a_jahr == b_jahr)
anz = b_Tage - a_Tage;
else {
anz = Tage_pro_Jahr(a_jahr) - a_Tage;
jahr = a_jahr + 1;
while (jahr < b_jahr) {
anz = anz + Tage_pro_Jahr(jahr);
jahr++;
}
anz = anz + b_Tage;
}
return anz;
}
|
Problematisch bei der Berechnung der Differenz ist die Frage: Gehören die Grenztage
zur Differenz hinzu oder nicht? Rein rechnerisch ist die Differenz von 5 und 7 gleich 2.
Aber wieviel Tage sind es vom 5. eines Monats bis zum 7.? Sind es zwei Tage oder sind
es drei, da der 5. sowie der 7. erst einmal vorbei sein müssen? Bei den vorgestellten
Algorithmen wurde die "rein rechnerische" Variante gewählt. Wem die andere(n)
besser gefällt, muss entsprechend korrigieren.
b. Altersberechnung
Wer das Profil einer Person auf seinen Webseiten darstellt, der möchte nicht immer die
Seite erneuern, wenn die Person ein Jahr älter geworden ist. Hierfür bietet es sich dann
an, das Alter zu berechnen und dynamisch auf der Seite auszugeben. Dazu wird zunächst das
aktuelle Datum ermittelt, welches auf dem lokalen Rechner (!) eingestellt ist. Dann bestimmt
man, ob der Geburtstag bereits gewesen ist oder noch kommt; hierdurch wird das Jahr korrigiert.
Die Differenz des korrigierten aktuellen Jahres und dem Geburtsjahr ergibt dann das Alter.
var dat = new Date(); /* Ermittelt das aktuelle Datum */
function Alter(GebTag,GebMonat,GebJahr) {
var jahr = current_year();
var monat = dat.getMonth() + 1;
var tag = dat.getDate();
if (monat < GebMonat)
jahr = jahr-1;
else if ((monat == GebMonat) && (tag < GebTag))
jahr = jahr-1;
return(jahr-GebJahr);
}
|
Auf einer Webseite kann das Alter dann mit document.write(Alter(12,3,1958)); ausgegeben werden:
Wenn hier jetzt nicht das richtige Alter steht, dann sollte mal das eingestellte Datum kontrolliert
werden. (Das ganze funktioniert allerdings nur wenn der Browser auch JavaScript ausführt.)
c. Der verstrichene Termin
Wie peinlich kann es sein, nicht an einen Termin gedacht zu haben. Auf einer Webseite kann es
auch peinlich sein an einen Termin zu erinnern, obwohl dieser bereits verstrichen ist. Der hier
vorgestellt Algorithmus löst diese Problem, indem anhand des lokalen Datums berechnet wird, ob
ein gegebenes Datum bereits überschritten ist oder nicht. Auch hierzu wird zunächst das aktuelle
Datum ermittelt, um dann festzustellen ob es bereits nach dem gewünschten Termin liegt.
var dat = new Date(); /* Ermittelt das aktuelle Datum */
function verstrichen(a_tag,a_monat,a_jahr) {
var b_tag = dat.getDate();
var b_monat = dat.getMonth()+1;
var b_jahr = current_year();
if (a_jahr > b_jahr)
return false;
else if ((a_jahr == b_jahr) && (a_monat > b_monat))
return false;
else if ((a_jahr == b_jahr) && (a_monat == b_monat) && (a_tag > b_tag))
return false;
return true;
}
|
Abhängig vom Ergebnis dieser Funktion kann dann wiederum ein Veranstaltungshinweis auf
einer Seite wiedergegeben werden oder nicht.
| |