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 2002 && 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
(www.zelczak.com/feiertag.htm)