Feiertagsberechnung in Clipper/Visual Foxpro:
(Stand: 31.03.2002)

Das untenstehende Programm erzeugt eine Datenbank FEIERTAG.DBF,
die mit Daten und Texten gefüllt werden.
Sie müssen nur noch die Zeilen mit "do ausgabe with ..."
löschen/auskommentieren, die ein unerwünschtes Datum erzeugen
würden (regional kein Feiertag, durch Gesetz abgeschafft, ...).
Selbstverständlich hilft es ungemein,
wenn man auf das Feld DATUM einen Index setzt <g>.

Feiertagsberechnung in Javascript

set date german
if .not. file("feiertag.dbf")

Visual Foxpro Clipper
create dbf feiertag (datum d, text c(25)) create zwi
appe blan
repl field_name with "DATUM",;
field_type with "D",;
field_len with 8,;
field_dec with 0
appe blan
repl field_name with "TEXT",;
field_type with "C",;
field_len with 25,;
field_dec with 0
create feiertag from zwi
dele file zwi.dbf

endi
use feiertag

do feier_fuellen with 2
002 && Hier gewünschtes Jahr einsetzen!
use


proc feier_fuellen
param pnJahr
cJahr = str(pnJahr,4)

* Fixe Daten:
do ausgabe with ctod("01.01."+cJahr),"Neujahr"
do ausgabe with ctod("06.01."+cJahr),"Heilige Drei Könige"
do ausgabe with ctod("14.02."+cJahr),"Valentinstag"
do ausgabe with ctod("01.05."+cJahr),"Maifeiertag"
do ausgabe with ctod("05.05."+cJahr),"Europatag"
do ausgabe with ctod("15.08."+cJahr),"Mariä Himmelfahrt"
do ausgabe with ctod("03.10."+cJahr),"Tag der Deutschen Einheit"
do ausgabe with ctod("31.10."+cJahr),"Reformationstag"
do ausgabe with ctod("01.11."+cJahr),"Allerheiligen"
do ausgabe with ctod("31.12."+cJahr),"Silvester"

* Ostern:
ostern = ctod(oster_berech(pnJahr)+cJahr)

do ausgabe with ostern - 3, "Gründonnerstag"
do ausgabe with ostern - 2, "Karfreitag"
do ausgabe with ostern - 1, "Ostersamstag"
do ausgabe with ostern, "Ostersonntag"
do ausgabe with ostern + 1, "Ostermontag"

* Pfingsten:
do ausgabe with ostern + 49, "Pfingstsonntag"
do ausgabe with ostern + 50, "Pfingstmontag"
do ausgabe with ostern + 51, "Wäldchestag"
do ausgabe with ostern-52, "Weiberfastnacht"
do ausgabe with ostern-48, "Rosenmontag"
do ausgabe with ostern-47, "Fastnacht"
do ausgabe with ostern-46, "Aschermittwoch"


* Sommerzeit, letzter Sonntag im März
dHilf = ctod("31.03."+cJahr)
do while .t.
   if dow(dHilf) = 1 && Sonntag
      exit
   endi
   dHilf = dHilf - 1
endd
do ausgabe with dHilf, "Sommerzeit"

* Muttertag, 2. Sonntag im Mai
dHilf = ctod("01.05."+cJahr)
do while .t.
   if dow(dHilf) = 1 && Sonntag
      exit
   endi
   dHilf = dHilf + 1
endd
do ausgabe with dHilf+7, "Muttertag"

* Winterzeit, letzter Sonntag im Oktober
dHilf = ctod("31.10."+cJahr)
do while .t.
   if dow(dHilf) = 1 && Sonntag
      exit
   endi
   dHilf = dHilf - 1
endd
do ausgabe with dHilf, "Winterzeit"

* Weihnachten:
dHilf = ctod("23.12."+cJahr)
do while .t.
   if dow(dHilf) = 1 && Sonntag
      exit
   endi
   dHilf = dHilf - 1
endd
do ausgabe with dHilf - 21,"1. Advent"
do ausgabe with dHilf - 14,"2. Advent"
do ausgabe with dHilf - 7,"3. Advent"
do ausgabe with dHilf,"4. Advent"
do ausgabe with ctod("24.12."+cJahr), "Heiligabend"
do ausgabe with ctod("25.12."+cJahr), "1. Weihnachtsfeiertag"
do ausgabe with ctod("26.12."+cJahr), "2. Weihnachtsfeiertag"

* Diverse
do ausgabe with ostern + 39, "Himmelfahrt"
do ausgabe with ostern + 60, "Fronleichnam"

nTag = dow(ctod("24.12."+cJahr)) - 1
do ausgabe with ctod("31.12."+cJahr) - 39 - nTag, "Buß- und Bettag"
return

********************************************************** OSTER_BERECH
func oster_berech
param pnJahr
a0=int(((((pnJahr/19)-(int(pnJahr/19)))*19)*100+0.5)/100)
b0=int(((((pnJahr/4)-(int(pnJahr/4)))*4)*100+0.5)/100)
c0=int(((((pnJahr/7)-(int(pnJahr/7)))*7)*100+0.5)/100)
d0=int(((((((19*a0)+24)/30)-(int(((19*a0)+24)/30)))*30)*100+0.5)/100)
f0=((2*b0)+(4*c0)+(6*d0)+5)/7
e0=int(((((f0)-(int(f0)))*7)*100+0.5)/100)
ma = 22 + d0 + e0
ap = d0 + e0 - 9
if ap = 26
   retu "19.04."
endi
if ap = 25
   if d0 = 28
      if a0 > 10
         retu "18.04."
      endi
   endi
endi
if ma > 31
   retu ltrim(str(ap))+".04."
endi
retu ltrim(str(ma))+".03."

********************************************************** AUSGABE
proc ausgabe
param pdDatum, pcText
appe blan
repl datum with pdDatum,;
text with pcText
retu

Programmierungs-Seite

Startseite

(www.zelczak.com/feiertag.htm)