Påske, Pinse og Jul står for døren…

…eller gør de? Hvordan beregner man egenligt kirkehelligdagene i C5 så vi ved om de faktisk “står for døren”?

De almindelige datobestemte fridage og helligdage er jo til at finde rundt i – de falder på samme dato hvert år – så dem har vi ret godt styr på. Dem finder du lige selv datoerne på, ikke? 🙂

De “skæve” kirkehelligdagene er noget rod – for de er allesammen relative i forhold til Påskedag – og definitionen på Påskedag er: “Påskedag er den første søndag efter første fuldmåne efter forårsjævndøgn”. Held og lykke med at implementere det i C5! 🙂

Nu er vi jo heldigvis så flinke i Systemconnect – så vi har lavet arbejdet for dig. Følgende globale C5 funktion beregner Påskedag for et givent årstal indenfor den kalender nogen har bestemt at vi bruger lige p.t. (så lad nu være med at klage over at beregningen ikke virker for år 23 før vor tidsregning 🙂 ):

{XAL:.EasterDay}
// 31.08.2012 Systemconnect
#LocalMacro.a (&Year_ MOD 19) #EndMacro
#LocalMacro.b (&Year_ MOD 4) #EndMacro
#LocalMacro.c (&Year_ MOD 7) #EndMacro
#LocalMacro.d ((24 + 19*#a) MOD 30) #EndMacro
#LocalMacro.e ((5 + 2*#b + 4*#c + 6*#d) MOD 7) #EndMacro
#LocalMacro.day (22 + #d + #e <= 31 AND 22 + #d + #e >= 1 ?
                 22 + #d + #e : #d + #e - 9) #EndMacro
#LocalMacro.month (22 + #d + #e <= 31 AND 22 + #d + #e >= 1 ?
                   3 : 4) #EndMacro
FUNCTION DATE EasterDay (INT &Year_)
RETURN (#month == 4 AND #day == 26 ? MkDate(19,4,&Year_) :
        #month == 4 AND #day == 25 AND #d == 28 AND #a > 10 ?
        MkDate(18,4,&Year_) : MkDate(#day,#month,&Year_))

Ud over ovenstående skal du sådan set bare lige vide følgende:

  • Palmesøndag er 1 uge (aka 7 dage) før Påskedag
  • Påsken går fra 3 dage før og til 1 dag efter Påskedag (ja – jeg ved godt dagene har navne – men dem kan du selv finde 🙂 )
  • Store Bededag er 3 uger + 5 dage (aka 26 dage) efter Påskedag
  • Kristi Himmelfartsdag er 5 uger + 4 dage (aka 39 dage) efter Påskedag
    OBS: Bankerne har “indført” en ny kirkehelligdag: “Anden Kristi Himmelfartsdag” :-). Kristi Himmelfartsdag er nemlig en torsdag og bankerne betragter fredagen efter som en bank-lukkedag.
  • Pinsedag er 7 uger (aka 49 dage) efter Påskedag
  • Pinsen strækker sig over Pinsedag + 1 dag

Dermed skulle der være styr på de skæve kirkehelligdage.

Du har hermed lov til at bruge ovenstående stump kode i dine projekter, så længe du ikke tager penge for det… God fornøjelse 🙂