home
Der Recherchekompass
  [ home | anleitungen | recherchen | hilfe | sitemap | index | suchen ] 
home » recherchen » calendarium » anhang » weitere algorithmen (B) Glossar »

  Unser Kalender:
A. Weitere Datumsalgorithmen

[Datumsdifferenz] [Altersberechnung] [Terminablauf]
 

 

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:


 function Tage_pro_Jahr(jahr) {
    return 365 + ist_Schaltjahr(jahr);
 } 

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.

 

 

(B) Glossar »

[Seitenanfang] geändert: 11.10.2001 by hgm © 1999, Hans-G. Mekelburg, all rights reserved.
[ impressum | haftungsausschluss ]