XProfan Forum Community: Nach Serverausfall, noch geht fast nix, bin dran!

English
Source / code snippets

Calendar Easter Advent

 

Michael
W.
​Ich have time a couple extensions for dt-container gebastelt. The Step-functions are of course not absolutely necessary, vereinfachen The Programming but.

/* date/Time-functions (ex vX2)

dt("Compare",D1,D2) -- vergleicht two Zeitpunkte (signum)
dt("CompareDate",D1,D2) -- vergleicht two Datumswerte (signum)
dt("CompareTime",D1,D2) -- vergleicht two times (signum)

dt("DateTimeStr",s[,D]) -- foramtierte spending of Date and Time
dt("DaysBetween",D1,D2) -- days between two Datumswerten

dt("getDate",n[,D]) -- determined the date in different Schreibweisen
dt("getDay",D) -- determined whom day one Zeitpunktes
dt("getMonth",D) -- determined whom month one Zeitpunktes
dt("getYear",D) -- determined the year one Zeitpunktes
dt("getTime",n[,D]) -- determined The Time in different Schreibweisen
dt("getHour",D) -- determined The hour one Zeitpunktes
dt("getMin",D) -- determined The Minute one Zeitpunktes
dt("getSec",D) -- determined The second one Zeitpunktes
dt("getMilliSec",D) -- determined The MilliSekunde one Zeitpunktes

dt("getDoW",D) -- determined whom week-day one Zeitpunktes (1..7, 1=Mo)
dt("getDoY",D) -- determined whom day in the year one Zeitpunktes (1..366)
dt("getWoY",D) -- determined The Jahreswoche one Zeitpunktes (1..53)

dt("incDay",D,n) -- increased whom day
dt("incMonth",D,n) -- increased The months
dt("incYear",D,n) -- increased the year
dt("incHour",D,n) -- increased The hours
dt("incMin",D,n) -- increased The minutes
dt("incSec",D,n) -- increased The sec

dt("IsLeapYear",D) -- checks on leap-year

dt("setDateTime",y,m,d,h,n,s,ms) -- setting whom Time
dt("setDate",s[,D]) -- setting the date
dt("setDate",y,m,d[,D]) -- setting the date
dt("setDay",D,n) -- setting whom day
dt("setMonth",D,n) -- setting whom month
dt("setYear",D,n) -- setting the year
dt("setTime",h,n,s,ms[,D]) -- setting The Uhrzeit
dt("setTime",s[,D]) -- setting The Uhrzeit
dt("setHour",D,n) -- setting The hour
dt("setMin",D,n) -- setting The Minute
dt("setSec",D,n) -- setting The second
dt("setMilliSec",D,n) -- setting The Millisekunde
*/


/* New added:

dt("Advent4",year%) -- determined date the 4. Advent as Time
dt("Easter",year%) -- determined date the Ostersonntages as Time
dt("LastDayInMonth",M,Y) -- determined Ultimo-day the month's
dt("BoM",D) -- determined whom Beginn the month's (Beginning of Month)
dt("EoM",D) -- determined the end the month's (End of Month)
dt("Quarter",D) -- determined The QuartalsNr the Datums (1..4)
dt("BoQ",D) -- determined whom first day the Quartals the Datums ( 1.1. / 1.4. / 1.7. / 1.10.) (Beginning of Quarter)
dt("EoQ",D) -- determined whom last day the Quartals the Datums (31.3. / 30.4. / 30.9. / 31.12.) (End of Quarter)
dt("setBoQ",y,q) -- determined from year u. QuartalsNr. the date (Beginning of Quarter)
dt("setEoQ",y,q) -- determined from year u. QuartalsNr. the date (End of Quarter)
dt("BoW",D) -- determined whom Wochenbeginn (monday) (Beginning of Week)
dt("EoW",D) -- determined the weekend (sunday) (End of Week)
dt("BoY",D) -- determined whom Jahresbeginn ( 1. 1.) (Beginning of Year)
dt("EoY",D) -- determined the Jahresende (31.12.) (End of Year)

dt("WeekdayStep",D,"Mod") -- determined on week-day korrigiertes date
*/
/*
WeekdayStep:
The first part the mode-Strings contains: First,Prev,Next,Last
The second part is the desired week-day as short cut: Mo,Di,wen,Do,Fr,Sa,so, Mo,institute of technology,We,Th,Fr,Sa,Su
*/


/*
investigation the 4. Advent.
Hieraus yield itself then The subesquent data:
-- dt("Advent4",year%) = 4. Advent
-- dt("Advent4",year%) - 7 = 3. Advent
-- dt("Advent4",year%) - 14 = 2. Advent
-- dt("Advent4",year%) - 21 = 1. Advent
-- dt("Advent4",year%) - 28 = Totensonntag
-- dt("Advent4",year%) - 32 = Buß- and Bettag
-- dt("Advent4",year%) - 35 = memorial day
*/
SubProc dt.Advent4
Parameters year%
Declare day2512!
day2512! = dt("SetDate", year%,12,25)
Return ( day2512! - dt("GetDoW",day2512!) )
ENDPROC


/*
investigation the Ostersonntages.
Hieraus yield itself then The subesquent data:
-- oSo = dt("Easter",year%) = OsterSo
-- (further see Calendar(): are To many for here)
*/
SubProc dt.Easter
Parameters int Y
Declare int D,Mo, Century, r19, r30, x,x1,x2,x3,x4,x5
Century = Int(Y / 100) : r19 = Y mod 19 : x = ((Century - 15) >> 1) + 202 - r19 * 11
Select Century
CaseOf 21,24,25,27,28,29,30,31,32,34,35,38
Dec x
CaseOf 33,36,37,39,40
Dec x, 2
EndSelect
r30 = x mod 30 : x1 = r30 + 21
Case r30 == 29 : Dec x1
Case (r30 == 28) and (r19 > 10) : Dec x1
x2 = (x1 - 19) mod 7 : x3 = (40 - Century) mod 4
Case x3 == 3 : Inc x3
Case x3 > 1 : Inc x3
x = Y mod 100 : x4 = (x + x / 4) mod 7 : x5 = ((20 - x2 - x3 - x4) mod 7) + 1
D = x1 + x5 : Mo = 3
If D > 31
Dec D,31
Inc Mo
EndIf
Return dt("SetDate", Y,Mo,D)
ENDPROC


/* Beginning of Month */
SubProc dt.BoM
Parameters D!
Return dt("SetDay",D!,1)
ENDPROC


/* End of Month */
SubProc dt.EoM
Parameters D!
Declare D%,Mo%,Y%
Y% = dt("getYear",D!)
Mo% = dt("getMonth",D!)
D% = dt("LastDayInMonth",Mo%,Y%)
Return dt("SetDate", Y%,Mo%,D% )
ENDPROC


/* LastDayInMonth (Ultimo) */
SubProc dt.LastDayInMonth
// Ultimo = dt("LastDayInMonth",M,Y)
Parameters int M, Y
Declare int Leap
Var int LDiM[] = 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
Var int Ultimo = -1
Leap = if((((Y mod 4) = 0) and ((Y mod 100) <> 0)) or ((Y mod 400) = 0),1,0) // isLeapYear(Y)
Case Between(M,1,12) : Ultimo = LDiM[M] + if( (M = 2) and (Leap = 1), 1, 0)
Return Ultimo
ENDPROC
SubProc dt.Ultimo
Parameters int M, Y
Return dt("LastDayInMonth",M,Y)
ENDPROC


/* Quarter */
SubProc dt.Quarter
Parameters D!
Return Int((dt("GetMonth",D!) - 1) / 3) + 1
ENDPROC
SubProc dt.quarter
Parameters D!
Return dt("Quarter",D!)
ENDPROC


/* Beginning of Quarter */
SubProc dt.BoQ
Parameters D!
Declare M%
M% = dt("GetMonth",D!) - 1
D! = dt("SetDay",D!,1)
Return dt("SetMonth",D!,(Int(M% / 3) + 1) * 3 - 2)
ENDPROC


/* End of Quarter */
SubProc dt.EoQ
Parameters D!
Declare M%
M% = dt("GetMonth",D!) - 1
D! = dt("SetDay",D!,1)
Return dt("SetMonth",D!,(Int(M% / 3) + 1) * 3)
ENDPROC


/* Set Beginning of Quarter */
SubProc dt.setBoQ
Parameters Year%, QuarterNo%
Declare M%
Casenote Between(QuarterNo%,1,4) : QuarterNo% = 1
M% = QuarterNo% * 3 - 2
Return dt("SetDate",Year%,M%,1)
ENDPROC


/* Set End of Quarter */
SubProc dt.setEoQ
Parameters Year%, QuarterNo%
Declare M%
Casenote Between(QuarterNo%,1,4) : QuarterNo% = 1
M% = QuarterNo% * 3
Return dt("SetDate", Year%,M%, dt("LastDayInMonth",M%,Year%) )
ENDPROC


/* Beginning of Week */
SubProc dt.BoW
Parameters D!
Return ( D! - (dt("GetDoW",D!) - 1) )
ENDPROC


/* End of Week */
SubProc dt.EoW
Parameters D!
Return ( D! + (7 - dt("GetDoW",D!)) )
ENDPROC


/* Beginning of Year */
SubProc dt.BoY
Parameters D!
Return dt("SetDate",dt("GetYear",D!),1,1)
ENDPROC


/* End of Year */
SubProc dt.EoY
Parameters D!
Return dt("SetDate",dt("GetYear",D!),12,31)
ENDPROC


/* WeekdayStep: Wochentage go through */
/* - FirstMo - PrevDi - NextDo - LastSa */
SubProc dt.WeekdayStep
Parameters D!, mode$
Declare fashion%, WDay$, WD%, W%
mode$ = Lower$(mode$) : WDay$ = Right$(mode$,2) : WD% = 0
Case InStr("ridge",mode$) : fashion% = 0
Case InStr("prev",mode$) : fashion% = 1
Case InStr("next",mode$) : fashion% = 2
Case InStr("last",mode$) : fashion% = 3
WhileLoop 1,14
If SubStr$("mo,di,wen,do,fr,sa,so,mo,institute of technology,we,th,fr,sa,su", &Loop, ",") = WDay$
Case &Loop <= 7 : WD% = &Loop - 1
Case &Loop > 7 : WD% = &Loop - 8
BREAK
EndIf
EndWhile

// Korrektur of the day
Case fashion% = 0 : D! = dt("BoM",D!)
Case fashion% = 3 : D! = dt("EoM",D!)

While WD% < 0 : Inc WD%,7 : EndWhile : WD% = WD% mod 7 : Inc WD%
W% = dt("getDoW",D!)
Select fashion%
CaseOf 0 // First
While W% <> WD%
D! = D! + 1
Inc W%
Case W% > 7 : W% = 1
EndWhile
CaseOf 1 // Prev
Repeat
D! = D! - 1
Dec W%
Case W% < 1 : W% = 7
Until W% = WD%
CaseOf 2 // Next
Repeat
D! = D! + 1
Inc W%
Case W% > 7 : W% = 1
Until W% = WD%
CaseOf 3 // Last
While W% <> WD%
D! = D! - 1
Dec W%
Case W% < 1 : W% = 7
EndWhile
EndSelect
Return D!
ENDPROC

/* only to Vereinfachung with adopted */
SubProc dt.FirstMo : Parameters D! : Return dt("WeekdayStep",D!,"FirstMo") : ENDPROC
SubProc dt.FirstDi : Parameters D! : Return dt("WeekdayStep",D!,"FirstDi") : ENDPROC
SubProc dt.FirstMi : Parameters D! : Return dt("WeekdayStep",D!,"FirstMi") : ENDPROC
SubProc dt.FirstDo : Parameters D! : Return dt("WeekdayStep",D!,"FirstDo") : ENDPROC
SubProc dt.FirstFr : Parameters D! : Return dt("WeekdayStep",D!,"FirstFr") : ENDPROC
SubProc dt.FirstSa : Parameters D! : Return dt("WeekdayStep",D!,"FirstSa") : ENDPROC
SubProc dt.FirstSo : Parameters D! : Return dt("WeekdayStep",D!,"FirstSo") : ENDPROC
SubProc dt.FirstTu : Parameters D! : Return dt("WeekdayStep",D!,"FirstTu") : ENDPROC
SubProc dt.FirstWe : Parameters D! : Return dt("WeekdayStep",D!,"FirstWe") : ENDPROC
SubProc dt.FirstTh : Parameters D! : Return dt("WeekdayStep",D!,"FirstTh") : ENDPROC
SubProc dt.FirstSu : Parameters D! : Return dt("WeekdayStep",D!,"FirstSu") : ENDPROC

SubProc dt.PrevMo : Parameters D! : Return dt("WeekdayStep",D!,"PrevMo") : ENDPROC
SubProc dt.PrevDi : Parameters D! : Return dt("WeekdayStep",D!,"PrevDi") : ENDPROC
SubProc dt.PrevMi : Parameters D! : Return dt("WeekdayStep",D!,"PrevMi") : ENDPROC
SubProc dt.PrevDo : Parameters D! : Return dt("WeekdayStep",D!,"PrevDo") : ENDPROC
SubProc dt.PrevFr : Parameters D! : Return dt("WeekdayStep",D!,"PrevFr") : ENDPROC
SubProc dt.PrevSa : Parameters D! : Return dt("WeekdayStep",D!,"PrevSa") : ENDPROC
SubProc dt.PrevSo : Parameters D! : Return dt("WeekdayStep",D!,"PrevSo") : ENDPROC
SubProc dt.PrevTu : Parameters D! : Return dt("WeekdayStep",D!,"PrevTu") : ENDPROC
SubProc dt.PrevWe : Parameters D! : Return dt("WeekdayStep",D!,"PrevWe") : ENDPROC
SubProc dt.PrevTh : Parameters D! : Return dt("WeekdayStep",D!,"PrevTh") : ENDPROC
SubProc dt.PrevSu : Parameters D! : Return dt("WeekdayStep",D!,"PrevSu") : ENDPROC

SubProc dt.NextMo : Parameters D! : Return dt("WeekdayStep",D!,"NextMo") : ENDPROC
SubProc dt.NextDi : Parameters D! : Return dt("WeekdayStep",D!,"NextDi") : ENDPROC
SubProc dt.NextMi : Parameters D! : Return dt("WeekdayStep",D!,"NextMi") : ENDPROC
SubProc dt.NextDo : Parameters D! : Return dt("WeekdayStep",D!,"NextDo") : ENDPROC
SubProc dt.NextFr : Parameters D! : Return dt("WeekdayStep",D!,"NextFr") : ENDPROC
SubProc dt.NextSa : Parameters D! : Return dt("WeekdayStep",D!,"NextSa") : ENDPROC
SubProc dt.NextSo : Parameters D! : Return dt("WeekdayStep",D!,"NextSo") : ENDPROC
SubProc dt.NextTu : Parameters D! : Return dt("WeekdayStep",D!,"NextTu") : ENDPROC
SubProc dt.NextWe : Parameters D! : Return dt("WeekdayStep",D!,"NextWe") : ENDPROC
SubProc dt.NextTh : Parameters D! : Return dt("WeekdayStep",D!,"NextTh") : ENDPROC
SubProc dt.NextSu : Parameters D! : Return dt("WeekdayStep",D!,"NextSu") : ENDPROC

SubProc dt.LastMo : Parameters D! : Return dt("WeekdayStep",D!,"LastMo") : ENDPROC
SubProc dt.LastDi : Parameters D! : Return dt("WeekdayStep",D!,"LastDi") : ENDPROC
SubProc dt.LastMi : Parameters D! : Return dt("WeekdayStep",D!,"LastMi") : ENDPROC
SubProc dt.LastDo : Parameters D! : Return dt("WeekdayStep",D!,"LastDo") : ENDPROC
SubProc dt.LastFr : Parameters D! : Return dt("WeekdayStep",D!,"LastFr") : ENDPROC
SubProc dt.LastSa : Parameters D! : Return dt("WeekdayStep",D!,"LastSa") : ENDPROC
SubProc dt.LastSo : Parameters D! : Return dt("WeekdayStep",D!,"LastSo") : ENDPROC
SubProc dt.LastTu : Parameters D! : Return dt("WeekdayStep",D!,"LastTu") : ENDPROC
SubProc dt.LastWe : Parameters D! : Return dt("WeekdayStep",D!,"LastWe") : ENDPROC
SubProc dt.LastTh : Parameters D! : Return dt("WeekdayStep",D!,"LastTh") : ENDPROC
SubProc dt.LastSu : Parameters D! : Return dt("WeekdayStep",D!,"LastSu") : ENDPROC


/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
Proc Calendar
Parameters int Y
Declare int DoY, float dd, LastDat, xmas, adv4, ea, septua, trini_stop, string Kalenderdatei, xx
adv4 = dt("Advent4",Y) : trini_stop = adv4 - 35 // end the Trinitatis-Sonntage (week to memorial day)
ea = dt("Easter",Y) : septua = ea - 63 // end the Epiphanias-Sonntage (week to Septuagesimä)

Proc Fix
Parameters int d,m,y, string s
declare int DoY
LastDat = dt("setDate",y,m,d) : doy = dt("getDoY",LastDat) + 1000
AddStrings(0,st$(doy) $ " | " $ dt("DateTimeStr","dd.mm.yyyy (ddd) | ",LastDat) $ s)
ENDPROC
Proc Vari
Parameters float there, string s
declare int DoY
LastDat = there : doy = dt("getDoY",LastDat) + 1000
AddStrings(0,st$(doy) $ " | " $ dt("DateTimeStr","dd.mm.yyyy (ddd) | ",LastDat) $ s)
ENDPROC

ClearList 0
fix( 1, 1,Y,"new year [F]")
dd = dt("NextSo",LastDat) : Case dt("getDoY",dd) < 6 : vari(dd,"So. n. Neujahr")
fix( 6, 1,Y,"Hl. 3 Könige (Epiphanias) [f;BW,BY,ST]")
dd = dt("NextSo",LastDat)
WhileLoop 1,6 : Case dd < septua : vari(dd, &Loop $ ". So. n. Epiphanias") : dd = dt("NextSo",dd) : EndWhile
fix( 2, 2,Y,"Mariä Lichtmeß")
fix(14, 2,Y,"valentine")
fix(25, 3,Y,"Mariä Verkündigung")
fix(30, 4,Y,"Walpurgisnacht")
fix(24, 6,Y,"Johannistag")
fix(27, 6,Y,"Siebenschläfer")
fix(29, 6,Y,"Peter and Paul")
fix(15, 8,Y,"Mariä Himmelfahrt [f;BY,SL]")
fix(24, 8,Y,"Bartholomäustag")
fix( 1, 9,Y,"Ägidii")
fix( 8, 9,Y,"Mariä birth")
fix(29, 9,Y,"Michaelis")
' in the year 2017, the 500. year the Beginns the Reformation,
' is the 31. october einmalig one gesamtdeutscher
' gesetzlicher holiday.
if (Y = 2017)
fix(31,10,Y,"Reformationstag [F]")
Else
fix(31,10,Y,"Reformationstag [f;BB,MV,SN,ST,TH]")
EndIf
fix(31,10,Y,"Halloween")
fix( 1,11,Y,"all saints' days [f;BW,BY,NW,RP,SL]")
fix( 2,11,Y,"all souls' days")
fix(11,11,Y,"Martinstag (Martini)")
fix( 6,12,Y,"Nikolaus")
fix( 8,12,Y,"Mariä Empfängnis")
fix(26,12,Y,"2. Weihnachtsfeiertag [F]")
fix(31,12,Y,"New Year's Eves")

// Jahreszeiten
fix(21, 3,Y,"Frühlings-equinox")
fix(21, 6,Y,"summer-Sonnenwende")
fix(22, 9,Y,"autumn-equinox")
fix(21,12,Y,"winter-Sonnenwende")

// Sternzeichen
fix(21, 1,Y,"Sternzeichen Wassermann")
fix(20, 2,Y,"Sternzeichen Fische")
fix(21, 3,Y,"Sternzeichen Widder")
fix(21, 4,Y,"Sternzeichen Stier")
fix(21, 5,Y,"Sternzeichen twins")
fix(22, 6,Y,"Sternzeichen cancer")
fix(23, 7,Y,"Sternzeichen Löwe")
fix(24, 8,Y,"Sternzeichen virgin")
fix(24, 9,Y,"Sternzeichen balance")
fix(24,10,Y,"Sternzeichen scorpion")
fix(23,11,Y,"Sternzeichen Schütze")
fix(22,12,Y,"Sternzeichen Steinbock")

Case Y >= 1934 : fix( 1, 5,Y,"Maifeiertag [F]")
Case Y >= 1964 : fix( 5, 5,Y,"Europatag (formation the Europarates 1949)")
Case Y >= 1985 : fix( 9, 5,Y,"Europatag (Schuman-Statement (1950), mündete in EGKS u later EU)")
If Between(Y,1954,1990)
fix(17, 6,Y,"day the german unity [F]")
ElseIf Y >= 1991
fix(17, 6,Y,"day the german unity [Gedenktag]")
EndIf
Case Y >= 1990 : fix( 3,10,Y,"day the german unity [F]")

// Sommerzeit
vari( dt("LastSo",dt("setDate",Y, 3,1)), "beginning the Sommerzeit (MESZ)") // last SO in the March
vari( dt("LastSo",dt("setDate",Y,10,1)), "end the Sommerzeit (Normalzeit) (MEZ)") // last SO in the october

// Muttertag
Case Y >= 1933 : vari( dt("FirstSo",dt("setDate",Y,5,1)) + 7, "Muttertag") // zweiter SO in the May (ploy: first SO + 7)

// Erntedank rk & ev
Case Y >= 1972 : vari( dt("FirstSo",dt("setDate",Y,9,1)), "Erntedankfest (1. SO i Sept) [rk]")
Case Y >= 1770 : vari( dt("NextSo",dt("setDate",Y,9,29)), "Erntedankfest (SO n Michaelis) [ev]")

// Trinitatis-Sonntage (1..27)
If Y >= 1334
dd = ea + 56 + 7
WhileLoop 1,27
Case dd < trini_stop : vari(dd, &Loop $ ". So. n. Trinitatis")
dd = dd + 7
EndWhile
EndIf


// Advent
' adv4 = dt("Advent4",Y)
fix(25,12,Y,"1. Weihnachtsfeiertag [F]")
xmas = LastDat
If (LastDat - 1) = adv4
fix(24,12,Y,"4. Advent and Heiligabend")
Else
fix(24,12,Y,"Heiligabend")
vari(adv4,"4. Advent")
EndIf
Case dt("getDoW",xmas) <= 5 : vari(dt("NextSo",xmas),"So. n. Weihnachten")
vari(adv4 - 7 ,"3. Advent")
vari(adv4 - 14,"2. Advent")
vari(adv4 - 21,"1. Advent")
vari(adv4 - 28,"Totensonntag (Ewigkeitssonntag) [G]")
vari(adv4 - 28,"Christkönigsfest [rk]")
If Between(Y,1934,1938)
vari(adv4 - 32,"Buß- and Bettag [F]")
ElseIf Between(Y,1946,1951)
vari(adv4 - 32,"Buß- and Bettag [f;BE,BW,HB,HE,HH,NI,NW,RP,SH,SL]")
ElseIf Between(Y,1952,1980)
vari(adv4 - 32,"Buß- and Bettag [f;BE,BW,BY(ev),HB,HE,HH,NI,NW,RP,SH,SL]")
ElseIf Between(Y,1981,1989)
vari(adv4 - 32,"Buß- and Bettag [f;BE,BW,BY,HB,HE,HH,NI,NW,RP,SH,SL]")
ElseIf Between(Y,1990,1994)
vari(adv4 - 32,"Buß- and Bettag [F;BE,BW,BY,HB,HE,HH,NI,NW,RP,SH,SL,BB,MV,SN,ST,TH]")
ElseIf Y >= 1995
vari(adv4 - 32,"Buß- and Bettag [f;SN]")
EndIf
vari(adv4 - 35,"memorial day")
vari(adv4 - 42,"Drittletzter SO the Kirchenjahres")


// Easter
' ea = dt("Easter",Y)
vari(ea - 52,"Weiberfastnacht (Schmotziger DO) (-Karneval-)")
vari(ea - 51,"Rußiger friday (-Karneval-)")
vari(ea - 50,"Nelkensamstag (Schmalziger SA) (-Karneval-)")
vari(ea - 49,"Tulpensonntag (Herrenfastnacht) (-Karneval-)")
vari(ea - 48,"Rosenmontag (-Karneval-)")
vari(ea - 47,"shrovetide carnival (Veilchendienstag) (-Karneval-)")
vari(ea - 46,"Aschermittwoch (Beginn the Lent) (-Karneval-)")

vari(ea - 63,"Septuagesimae (9.so v Easter)")
vari(ea - 56,"Sexagesimae (8.so v Easter)")
vari(ea - 49,"Estomihi (7.so v Easter)")
vari(ea - 42,"Invokavit (6.FastenSo v Easter)")
vari(ea - 35,"Reminiscere (5.FastenSo v Easter)")
vari(ea - 28,"Okuli (4.FastenSo v Easter)")
vari(ea - 21,"Laetare (3.FastenSo v Easter)")
vari(ea - 14,"Judica (2.FastenSo v Easter)")
vari(ea - 8,"[en] (Sat. of Lazarus)")
vari(ea - 7,"Palmsonntag (1.FastenSo v Easter)")
vari(ea - 3,"maundy thursday")
vari(ea - 2,"Karfreitag [F]")
vari(ea - 1,"Karsamstag (Ostersamstag)")
vari(ea ,"Easter Sunday (rk:1.so the Osterzeit) [f;BB]")
vari(ea + 1,"Easter Monday [F]")
vari(ea + 7,"Quasimodogeniti (ev:1.so n Easter)(rk:2.so the Osterzeit/Weißer sunday)")
vari(ea + 14,"Misericordias Domini (ev:2.so n Easter)(rk:3.so the Osterzeit)")
vari(ea + 21,"Jubilate (ev:3.so n Easter)(rk:4.so the Osterzeit)")
vari(ea + 28,"Kantate (ev:4.so n Easter)(rk:5.so the Osterzeit)")
vari(ea + 35,"Rogate (ev:5.so n Easter)(rk:6.so the Osterzeit)")
vari(ea + 39,"Christi Himmelfahrt (Vatertag/Herrentag) [F]")
vari(ea + 42,"Exaudi (ev:6.so n Easter)(rk:7.so the Osterzeit)")
vari(ea + 49,"Pfingstsonntag (7.so n Easter) [f;BB]")
vari(ea + 50,"Pfingstmontag [F]")
vari(ea + 53,"corpus christi day (Corpus Domini, Corpus Christi) [f;BW,BY,HE,NW,RP,SL]")

Case Y >= 1856 : vari(ea + 63,"marrow Jesu solid (2. SO n Pentecost)")
Case Y >= 1334 : vari(ea + 56,"Trinitatis (8. so n Ostern; 1. SO n Pentecost) Dreifaltigkeit/Dreieinigkeit")


SortList 1
' Kalenderdatei = $TempDir $ "\KALENDER_TEMP.txt"
Declare int err
MkDir "C:\TEMP"
err = %IOResult
Kalenderdatei = "C:\TEMP\KALENDER_" $ Y $ "_TEMP.txt"
Move("ListToFile",Kalenderdatei)
' WhileLoop 0,GetCount(0) - 1
' xx = GetString$(0,&loop)
' Print SubStr$(xx,2," | ") $ " " $ SubStr$(xx,3," | ")
' EndWhile
' Print "---" $ Kalenderdatei $ "---"
ClearList
Shell "NotePad " $ Kalenderdatei
ENDPROC

Proc Test
Declare d1!,d2!,Y%, e%
Proc show
Parameters d!,s$
Print dt("DateTimeStr", " ddd', the 'dd. mmmm yyyy; (", d! ) $ dt("getDoW",d!) $ "); " $ s$
ENDPROC
Proc show2
Parameters d1!,d2!,s$
Print dt("DateTimeStr", " dd.mm.yyyy (ddd)(", d1! ) $ dt("getDoW",d1!) $ "); " $ s$ $ dt("DateTimeStr", " dd.mm.yyyy (ddd)(", d2! ) $ dt("getDoW",d2!) $ "); "
ENDPROC
Cls
d2! = !now : Y% = dt("GetYear",d2!)
Print "Advent4"
d1! = dt("Advent4",Y%)
show(d1!, "4. Advent")
show(d1! - 7, "3. Advent")
show(d1! - 14, "2. Advent")
show(d1! - 21, "1. Advent")
show(d1! - 28, "Totensonntag")
show(d1! - 32, "Buß- and Bettag")
show(d1! - 35, "memorial day")
Print "BoM/EoM - Beginning/End Of Month"
show2( dt("BoM",d1!), dt("EoM",d1!), "(BoM)")
Print "BoQ - Beginning Of Quarter"
show2( dt("BoQ",d1!), dt("EoQ",d1!), "(BoQ)")
whileloop 1,4
show2( dt("setBoQ",2016,&loop), dt("setEoQ",2016,&loop), "(setBoQ) " $ &loop $ ".Q.")
endwhile
Print "BoW - Beginning Of Week (Monday)"
whileloop 1,4
show2( dt("BoW",dt("setBoQ",Y%,&loop) + 7), dt("EoW",dt("setEoQ",Y%,&loop) - 7), "(setBoQ) " $ &loop $ ".Q.")
endwhile
Print "BoY - Beginning Of Year"
show2( dt("BoY",d1!), dt("EoY",d1!), "(BoY)")
Print "Easter"
d1! = dt("Easter",Y%)
show(d1!, "Easter Sunday")
show(dt("bow",d1!), "Mo")
show(dt("eow",d1!), "so")

d2! = dt("FirstSo",d1!)
whileloop 1,4
show(d2!, &loop $ ". so")
d2! = dt("NextSo",d2!)
endwhile
' WaitInput
If dt("quarter",!now) <= 2
' Vorjahr and News year
Calendar( dt("getYear",!now) - 1 )
Calendar( dt("getYear",!now) )
Else
' News year and nächstes year
Calendar( dt("getYear",!now) )
Calendar( dt("getYear",!now) + 1 )
EndIf
WaitInput
ENDPROC

Test
end

​Es go two Datumslisten with Notepad opened.
Upd.: now go the two years to quarter chosen. in the first Half the year are it Vorjahr and year, in the second Half are it year and Folgejahr.
 
System: Windows 8/10, XProfan X4
Programmieren, das spannendste Detektivspiel der Welt.
12/12/16  
 




Michael
W.
with a couple Thoughts weekend and Wochenstart...

...Wochentage count...


/* date/Time-functions (ex XProfan X2)
Zeitpunkte go as D indicated.

dt("Compare",D1,D2) -- vergleicht two Zeitpunkte (Return signum)
dt("CompareDate",D1,D2) -- vergleicht two Datumswerte (Return signum)
dt("CompareTime",D1,D2) -- vergleicht two times (Return signum)

dt("DateTimeStr",s[,D]) -- foramtierte spending of Date and Time (Return string)
dt("DaysBetween",D1,D2) -- days between two Datumswerten (Return int)

dt("getDate",n[,D]) -- determined the date in different Schreibweisen (Return string)
dt("getDay",D) -- determined whom day one Zeitpunktes (Return int)
dt("getMonth",D) -- determined whom month one Zeitpunktes (Return int)
dt("getYear",D) -- determined the year one Zeitpunktes (Return int)
dt("getTime",n[,D]) -- determined The Time in different Schreibweisen (Return string)
dt("getHour",D) -- determined The hour one Zeitpunktes (Return int)
dt("getMin",D) -- determined The Minute one Zeitpunktes (Return int)
dt("getSec",D) -- determined The second one Zeitpunktes (Return int)
dt("getMilliSec",D) -- determined The MilliSekunde one Zeitpunktes (Return int)

dt("getDoW",D) -- determined whom week-day one Zeitpunktes (Return 1..7, 1=Mo)
dt("getDoY",D) -- determined whom day in the year one Zeitpunktes (Return 1..366)
dt("getWoY",D) -- determined The Jahreswoche one Zeitpunktes (Return 1..53)

dt("incDay",D,n) -- increased whom day (Return float D)
dt("incMonth",D,n) -- increased The months (Return float D)
dt("incYear",D,n) -- increased the year (Return float D)
dt("incHour",D,n) -- increased The hours (Return float D)
dt("incMin",D,n) -- increased The minutes (Return float D)
dt("incSec",D,n) -- increased The sec (Return float D)

dt("IsLeapYear",D) -- checks on leap-year (Return 0..1)

dt("setDateTime",y,m,d,h,n,s,ms) -- setting whom Time (Return float D)
dt("setDate",s[,D]) -- setting the date (Return float D)
dt("setDate",y,m,d[,D]) -- setting the date (Return float D)
dt("setDay",D,n) -- setting whom day (Return float D)
dt("setMonth",D,n) -- setting whom month (Return float D)
dt("setYear",D,n) -- setting the year (Return float D)
dt("setTime",h,n,s,ms[,D]) -- setting The Uhrzeit (Return float D)
dt("setTime",s[,D]) -- setting The Uhrzeit (Return float D)
dt("setHour",D,n) -- setting The hour (Return float D)
dt("setMin",D,n) -- setting The Minute (Return float D)
dt("setSec",D,n) -- setting The second (Return float D)
dt("setMilliSec",D,n) -- setting The Millisekunde (Return float D)
*/



/* New added: */
Var int dt_VAR_Beginning_of_the_Week = 1 // Mo
Var int dt_VAR_Weekend_Days_one_Week = 2 // Sa + so

/* New added:
dt_VAR_Beginning_of_the_Week = 1 -- 1..7, 1=Mo
-- piloting The subesquent Wochenfunktionen: (so can the Wochenstart z.B. in USA on 7=Sonntag redeploying go)
- dt("BoW"..., dt("EoW"...
dt_VAR_Weekend_Days_one_Week = 2 -- 1..x, so,Sa,Fr,...
- dt("isWeekend"..., dt("isWorkday"..., dt("NextWorkday"..., dt("PrevWorkday"..., dt("Sum_Workdays"...


dt("Advent4",year) -- determined date the 4. Advent as Time (Return float D)
dt("Advent4",D) -- determined date the 4. Advent as Time (Return float D)
dt("Easter",year) -- determined date the Ostersonntages as Time (Return float D)
dt("Easter",D) -- determined date the Ostersonntages as Time (Return float D)

dt("BoM",D) -- determined whom Beginn the month's (Beginning of Month) (Time) (Return float D)
dt("EoM",D) -- determined the end the month's (End of Month) (Time) (Return float D)

dt("LastDayInMonth",M,Y) -- determined Ultimo-day the month's (last day the month's) (M,Y) (Return 1..31)
dt("LastDayInMonth",D) -- determined Ultimo-day the month's (last day the month's) (Time) (Return 1..31)

dt("Ultimo",M,Y) -- determined Ultimo-day the month's (last day the month's) (M,Y) (Return float D)
dt("Ultimo",D) -- determined Ultimo-day the month's (last day the month's) (Time) (Return float D)

dt("BoQ",D) -- determined whom first day the Quartals the Datums ( 1.1. / 1.4. / 1.7. / 1.10.) (Beginning of Quarter) (Time) (Return float D)
dt("BoQ",Y,QNr) -- determined whom first day the Quartals from the Quartalsnummer ( 1..4 ) (Beginning of Quarter) (Y,QNr) (Return float D)

dt("EoQ",D) -- determined whom last day the Quartals the Datums (31.3. / 30.4. / 30.9. / 31.12.) (End of Quarter) (Time) (Return float D)
dt("EoQ",Y,QNr) -- determined whom last day the Quartals from the Quartalsnummer ( 1..4 ) (End of Quarter) (Y,QNr) (Return float D)

dt("BoW",D) -- determined whom Wochenbeginn (Beginning of Week) (mind dt_VAR_Beginning_of_the_Week) (Time) (Return float D)

dt("EoW",D) -- determined the weekend (End of Week) (mind dt_VAR_Beginning_of_the_Week) (Time) (Return float D)

dt("BoY",D) -- determined whom Jahresbeginn ( 1. 1.) (Beginning of Year) (Time) (Return float D)

dt("EoY",D) -- determined the Jahresende (31.12.) (End of Year) (Time) (Return float D)

dt("WeekdayStep",D,"fashion") -- determined on week-day korrigiertes date (Return float D)

dt("DateAdd",D,there,We,Mo,Y) -- add (or subtrahiere) days,weeks,months and years of/to that Time D!. (Time) (Return float D)
dt("NextWorkday",D) -- supply the date the next Werktages (mind dt_VAR_Weekend_Days_one_Week). (Time) (Return float D)
dt("PrevWorkday",D) -- supply the date the previous Werktages (mind dt_VAR_Weekend_Days_one_Week). (Time) (Return float D)

dt("Yesterday") -- supply whom yesterday's day (!now-1) (Return float D)
dt("Today") -- supply whom present day (!now) (Return float D)
dt("Tomorrow") -- supply whom tomorrow's day (!now+1) (Return float D)

dt("NtoD",D) -- NToD How CToD$(), but with Zeitpunkten (D! -> "YYYYMMDD") (Return long YYYYMMDD) Datenfeld$ = Str$(dt("NtoD",D))
dt("DtoN",s) -- DToN How DToC$(), but with Zeitpunkten ("YYYYMMDD" -> D!) (Return float D) date! = dt("DtoN",Val(Datenfeld$))

dt("ActualDay") -- determined whom actually day (Return 1..31)
dt("ActualMonth") -- determined whom actually month (Return 1..12)
dt("ActualYear") -- determined the actually year (Return 1600..3999)

dt("Quarter",D) -- determined The QuartalsNr the Datums (Time) (Return 1..4)
dt("Quarter",s) -- determined The QuartalsNr the Datums ("dd.mm.yyyy") (Return 1..4)
dt("Quarter",there,M,Y) -- determined The QuartalsNr the Datums (there,M,Y) (Return 1..4)

dt("DiffDate",DA!,DB!,*D,*M,*Y) -- difference zweier data as days,months,years and Tagessumme. (Time) (Return quadint)

dt("isWeekend",D) -- vergleicht week-day (Mo..so) on weekend (mind dt_VAR_Weekend_Days_one_Week) (Return 0..1)
dt("isWorkday",D) -- vergleicht week-day (Mo..so) on workday (mind dt_VAR_Weekend_Days_one_Week) (Return 0..1)
dt("Sum_Workdays",D1!,D2!,*WE) -- summiert Wochentage/weekends zweier data (mind dt_VAR_Weekend_Days_one_Week) (Return long, ptr to long)
*/








/* any 65 dt-functions then sortiert:
dt_VAR_Beginning_of_the_Week = 1 -- 1..7, 1=Mo
-- piloting The subesquent Wochenfunktionen: (so can the Wochenstart z.B. in USA on 7=Sonntag redeploying go)
- dt("BoW"..., dt("EoW"...
dt_VAR_Weekend_Days_one_Week = 2 -- 1..x, so,Sa,Fr,...
- dt("isWeekend"..., dt("isWorkday"..., dt("NextWorkday"..., dt("PrevWorkday"..., dt("Sum_Workdays"...

dt("ActualDay") --* determined whom actually day (Return 1..31)
dt("ActualMonth") --* determined whom actually month (Return 1..12)
dt("ActualYear") --* determined the actually year (Return 1600..3999)
dt("Advent4",D!) --* determined date the 4. Advent as Time (Return float D)
dt("Advent4",year%) --* determined date the 4. Advent as Time (Return float D)
dt("BoM",D) --* determined whom Beginn the month's (Beginning of Month) (Time) (Return float D)
dt("BoQ",D) --* determined whom first day the Quartals the Datums ( 1.1. / 1.4. / 1.7. / 1.10.) (Beginning of Quarter) (Time) (Return float D)
dt("BoQ",there.M.Y) --* determined whom first day the Quartals the Datums ( 1.1. / 1.4. / 1.7. / 1.10.) (Beginning of Quarter) (there,M,Y) (Return float D)
dt("BoQ",s) --* determined whom first day the Quartals the Datums ( 1.1. / 1.4. / 1.7. / 1.10.) (Beginning of Quarter) ("dd.mm.yyyy") (Return float D)
dt("BoQ",Y,QNr) --* determined whom first day the Quartals from the Quartalsnummer ( 1..4 ) (Beginning of Quarter) (Y,QNr) (Return float D)
dt("BoW",D) --* determined whom Wochenbeginn (Beginning of Week) (mind dt_VAR_Beginning_of_the_Week) (Time) (Return float D)
dt("BoW",there,M,Y) --* determined whom Wochenbeginn (Beginning of Week) (mind dt_VAR_Beginning_of_the_Week) (there,M,Y) (Return float D)
dt("BoW",s) --* determined whom Wochenbeginn (Beginning of Week) (mind dt_VAR_Beginning_of_the_Week) ("dd.mm.yyyy") (Return float D)
dt("BoY",D) --* determined whom Jahresbeginn ( 1. 1.) (Beginning of Year) (Time) (Return float D)
dt("BoY",there,M,Y) --* determined whom Jahresbeginn ( 1. 1.) (Beginning of Year) (there,M,Y) (Return float D)
dt("BoY",s) --* determined whom Jahresbeginn ( 1. 1.) (Beginning of Year) ("dd.mm.yyyy") (Return float D)
dt("Compare",D1,D2) -- vergleicht two Zeitpunkte (Return signum)
dt("CompareDate",D1,D2) -- vergleicht two Datumswerte (Return signum)
dt("CompareTime",D1,D2) -- vergleicht two times (Return signum)
dt("DateAdd",D,there,We,Mo,Y) --* add (or subtrahiere) days,weeks,months and years of/to that Time D!. (Time) (Return float D)
dt("DateTimeStr",s[,D]) -- foramtierte spending of Date and Time (Return string)
dt("DaysBetween",D1,D2) -- days between two Datumswerten (Return int)
dt("DiffDate",DA!,DB!,*D,*M,*Y) --* difference zweier data as days,months,years and Tagessumme. (Time) (Return quadint)
dt("DtoN",s) --* DToN How DToC$(), but with Zeitpunkten ("YYYYMMDD" -> D!) (Return float D) date! = dt("DtoN",Val(Datenfeld$))
dt("Easter",year) --* determined date the Ostersonntages as Time (Return float D)
dt("EoM",D) --* determined the end the month's (End of Month) (Time) (Return float D)
dt("EoQ",D) --* determined whom last day the Quartals the Datums (31.3. / 30.4. / 30.9. / 31.12.) (End of Quarter) (Time) (Return float D)
dt("EoQ",there,M,Y) --* determined whom last day the Quartals the Datums (31.3. / 30.4. / 30.9. / 31.12.) (End of Quarter) (there,M,Y) (Return float D)
dt("EoQ",s) --* determined whom last day the Quartals the Datums (31.3. / 30.4. / 30.9. / 31.12.) (End of Quarter) ("dd.mm.yyyy") (Return float D)
dt("EoQ",Y,QNr) --* determined whom last day the Quartals from the Quartalsnummer ( 1..4 ) (End of Quarter) (Y,QNr) (Return float D)
dt("EoW",D) --* determined the weekend (End of Week) (mind dt_VAR_Beginning_of_the_Week) (Time) (Return float D)
dt("EoW",there,M,Y) --* determined the weekend (End of Week) (mind dt_VAR_Beginning_of_the_Week) (there,M,Y) (Return float D)
dt("EoW",s) --* determined the weekend (End of Week) (mind dt_VAR_Beginning_of_the_Week) ("dd.mm.yyyy") (Return float D)
dt("EoY",D) --* determined the Jahresende (31.12.) (End of Year) (Time) (Return float D)
dt("EoY",there,M,Y) --* determined the Jahresende (31.12.) (End of Year) (there,M,Y) (Return float D)
dt("EoY",s) --* determined the Jahresende (31.12.) (End of Year) ("dd.mm.yyyy") (Return float D)
dt("getDate",n[,D]) -- determined the date in different Schreibweisen (Return string)
dt("getDay",D) -- determined whom day one Zeitpunktes (Return int)
dt("getDoW",D) -- determined whom week-day one Zeitpunktes (Return 1..7, 1=Mo)
dt("getDoY",D) -- determined whom day in the year one Zeitpunktes (Return 1..366)
dt("getHour",D) -- determined The hour one Zeitpunktes (Return int)
dt("getMilliSec",D) -- determined The MilliSekunde one Zeitpunktes (Return int)
dt("getMin",D) -- determined The Minute one Zeitpunktes (Return int)
dt("getMonth",D) -- determined whom month one Zeitpunktes (Return int)
dt("getSec",D) -- determined The second one Zeitpunktes (Return int)
dt("getTime",n[,D]) -- determined The Time in different Schreibweisen (Return string)
dt("getWoY",D) -- determined The Jahreswoche one Zeitpunktes (Return 1..53)
dt("getYear",D) -- determined the year one Zeitpunktes (Return int)
dt("incDay",D,n) -- increased whom day (Return float D)
dt("incHour",D,n) -- increased The hours (Return float D)
dt("incMin",D,n) -- increased The minutes (Return float D)
dt("incMonth",D,n) -- increased The months (Return float D)
dt("incSec",D,n) -- increased The sec (Return float D)
dt("incYear",D,n) -- increased the year (Return float D)
dt("IsLeapYear",D) -- checks on leap-year (Return 0..1)
dt("isWeekend",D) --* vergleicht week-day (Mo..so) on weekend (mind dt_VAR_Weekend_Days_one_Week) (Return 0..1)
dt("isWorkday",D) --* vergleicht week-day (Mo..so) on workday (mind dt_VAR_Weekend_Days_one_Week) (Return 0..1)
dt("LastDayInMonth",D) --* determined Ultimo-day the month's (last day the month's) (Time) (Return 1..31)
dt("LastDayInMonth",there,M,Y) --* determined Ultimo-day the month's (last day the month's) (there,M,Y) (Return 1..31)
dt("LastDayInMonth",M,Y) --* determined Ultimo-day the month's (last day the month's) (M,Y) (Return 1..31)
dt("LastDayInMonth",s) --* determined Ultimo-day the month's (last day the month's) ("dd.mm.yyyy") (Return 1..31)
dt("NextWorkday",D) --* supply the date the next Werktages (mind dt_VAR_Weekend_Days_one_Week). (Time) (Return float D)
dt("NtoD",D) --* NToD How CToD$(), but with Zeitpunkten (D! -> "YYYYMMDD") (Return long YYYYMMDD) Datenfeld$ = Str$(dt("NtoD",D))
dt("PrevWorkday",D) --* supply the date the previous Werktages (mind dt_VAR_Weekend_Days_one_Week). (Time) (Return float D)
dt("Quarter",D) --* determined The QuartalsNr the Datums (Time) (Return 1..4)
dt("Quarter",there,M,Y) --* determined The QuartalsNr the Datums (there,M,Y) (Return 1..4)
dt("Quarter",s) --* determined The QuartalsNr the Datums ("dd.mm.yyyy") (Return 1..4)
dt("setDate",s[,D]) -- setting the date (Return float D)
dt("setDate",y,m,d[,D]) -- setting the date (Return float D)
dt("setDateTime",y,m,d,h,n,s,ms) -- setting whom Time (Return float D)
dt("setDay",D,n) -- setting whom day (Return float D)
dt("setHour",D,n) -- setting The hour (Return float D)
dt("setMilliSec",D,n) -- setting The Millisekunde (Return float D)
dt("setMin",D,n) -- setting The Minute (Return float D)
dt("setMonth",D,n) -- setting whom month (Return float D)
dt("setSec",D,n) -- setting The second (Return float D)
dt("setTime",h,n,s,ms[,D]) -- setting The Uhrzeit (Return float D)
dt("setTime",s[,D]) -- setting The Uhrzeit (Return float D)
dt("setYear",D,n) -- setting the year (Return float D)
dt("Sum_Workdays",D1!,D2!,*WE) --* summiert Wochentage/weekends zweier data (mind dt_VAR_Weekend_Days_one_Week) (Return long, ptr to long)
dt("Today") --* supply whom present day (!now) (Return float D)
dt("Tomorrow") --* supply whom tomorrow's day (!now+1) (Return float D)
dt("Ultimo",D) --* determined Ultimo-day the month's (last day the month's) (Time) (Return float D)
dt("Ultimo",there,M,Y) --* determined Ultimo-day the month's (last day the month's) (there,M,Y) (Return float D)
dt("Ultimo",M,Y) --* determined Ultimo-day the month's (last day the month's) (M,Y) (Return float D)
dt("Ultimo",s) --* determined Ultimo-day the month's (last day the month's) ("dd.mm.yyyy") (Return float D)
dt("WeekdayStep",D,"fashion") --* determined on week-day korrigiertes date (Return float D)
dt("Yesterday") --* supply whom yesterday's day (!now-1) (Return float D)
*/






/*
investigation the 4. Advent.
Hieraus yield itself then The subesquent data:
-- dt("Advent4",year%) = 4. Advent
-- dt("Advent4",year%) - 7 = 3. Advent
-- dt("Advent4",year%) - 14 = 2. Advent
-- dt("Advent4",year%) - 21 = 1. Advent
-- dt("Advent4",year%) - 28 = Totensonntag
-- dt("Advent4",year%) - 32 = Buß- and Bettag
-- dt("Advent4",year%) - 35 = memorial day
(Return float D)
*/
SubProc dt.Advent4
If PType$(1) = "!"
Parameters float D
D = dt("SetDay",D,25)
D = dt("SetMonth",D,12)
Return ( D - dt("GetDoW",D) )
Else
Parameters int year
Declare float day2512
day2512 = dt("SetDate", year, 12, 25 )
Return ( day2512 - dt("GetDoW",day2512) )
EndIf
ENDPROC


/*
investigation the Ostersonntages.
Hieraus yield itself then The subesquent data:
-- oSo = dt("Easter",year%) = OsterSo
-- (further see Calendar(): are To many for here)
(Return float D)
*/
SubProc dt.Easter
Declare int Y
If PType$(1) = "!"
Parameters float Df
Y = dt("getYear",Df)
Else
Parameters int year
Y = year
EndIf
Declare int D,Mo, Century, r19, r30, x,x1,x2,x3,x4,x5
Century = Y \ 100
r19 = Y mod 19
x = ((Century - 15) >> 1) + 202 - r19 * 11
Select Century
CaseOf 21,24,25,27,28,29,30,31,32,34,35,38
Dec x
CaseOf 33,36,37,39,40
Dec x, 2
EndSelect
r30 = x mod 30
x1 = r30 + 21
Case r30 == 29 : Dec x1
Case (r30 == 28) and (r19 > 10) : Dec x1
x2 = (x1 - 19) mod 7
x3 = (40 - Century) mod 4
Case x3 == 3 : Inc x3
Case x3 > 1 : Inc x3
x = Y mod 100
x4 = (x + x / 4) mod 7
x5 = ((20 - x2 - x3 - x4) mod 7) + 1
D = x1 + x5
Mo = 3
If D > 31
Dec D,31
Inc Mo
EndIf
Return dt("SetDate", Y,Mo,D)
ENDPROC


/* BoM - Beginning of Month
float D = dt("BoM", float D) // Time
(Return float D)
*/
SubProc dt.BoM
Parameters float D
Return dt("SetDay",D,1)
ENDPROC


/* EoM - End of Month
float D = dt("EoM", float D) // Time
(Return float D)
*/
SubProc dt.EoM
Parameters float D
Return dt("Ultimo",D)
ENDPROC


/* LastDayInMonth
int Day = dt("LastDayInMonth", int Month,Year) // M,Y
int Day = dt("LastDayInMonth", float D) // Time

LastDayInMonth: supply whom day
Ultimo: supply whom Time
*/
SubProc dt.LastDayInMonth
Declare float D
If %PCount = 2
Parameters int Month,Year
D = dt("setDate",Year,Month,1)
Else
Parameters float D1
D = D1
EndIf
// -----
Case dt("GetMonth",D) = 12 : Return 31
// (01. MM+1. YYYY) -1
D = dt("SetDay",D, 1)
D = dt("SetMonth",D, dt("GetMonth",D) + 1)
D = dt("incDay",D, -1)
Return dt("GetDay",D)
ENDPROC


/* Ultimo
float D = dt("Ultimo", int Month,Year) // M,Y
float D = dt("Ultimo", float D) // Time

LastDayInMonth: supply whom day
Ultimo: supply whom Time
*/
SubProc dt.Ultimo
Declare float D
If %PCount = 2
Parameters int Month,Year
D = dt("setDate",Year,Month,1)
Else
Parameters float D1
D = D1
EndIf
// -----
If dt("GetMonth",D) = 12
D = dt("SetDay",D, 31)
Return D
EndIf
// (01. MM+1. YYYY) -1
D = dt("SetDay",D, 1)
D = dt("SetMonth",D, dt("GetMonth",D) + 1)
D = dt("incDay",D, -1)
Return D
ENDPROC


/* Quarter
(Return 1..4)
*/
SubProc dt.Quarter
Parameters float D
Return Int((dt("GetMonth",D) - 1) / 3) + 1
ENDPROC


/* Beginning of Quarter
(Return float D)
*/
SubProc dt.BoQ
Declare int PC, string PT
Declare float D
Declare int Mo
PC = %PCount
PT = PType$(1)
If PC = 1
Parameters float D1
D = D1
ElseIf PC = 2
Parameters int QYear, QuarterNo
Casenote Between(QuarterNo,1,4) : QuarterNo = 1
Mo = QuarterNo * 3 - 2
Return dt("setDate",QYear,Mo,1)
EndIf
// -----
Mo = dt("GetMonth",D) - 1
D = dt("SetDay",D,1)
Return dt("SetMonth",D,((Mo \ 3) + 1) * 3 - 2)
ENDPROC


/* End of Quarter
(Return float D)
*/
SubProc dt.EoQ
Declare int PC, string PT
Declare float D
Declare int Mo
PC = %PCount
PT = PType$(1)
If PC = 1
Parameters float D1
D = D1
ElseIf PC = 2
Parameters int QYear, QuarterNo
Casenote Between(QuarterNo,1,4) : QuarterNo = 1
Mo = QuarterNo * 3
Return dt("Ultimo",Mo,QYear)
EndIf
// -----
Mo = dt("GetMonth",D) - 1
D = dt("SetDay",D,1)
Return dt("SetMonth",D,((Mo \ 3) + 1) * 3)
ENDPROC


/* BoW - Beginning of Week // 1..7, 1=Mo
float D = dt("BoW", float D) // Time

determined from the date whom Wochenbeginn.
mind The Variable: dt_VAR_Beginning_of_the_Week
therefore can the Wochenstart according to country adjusted go.
*/
SubProc dt.BoW
Parameters float D
Declare int wd
wd = dt("getDoW",D)
While wd <> dt_VAR_Beginning_of_the_Week
D = D - 1
Dec wd
Case wd < 1 : wd = 7
EndWhile
Return D
ENDPROC


/* EoW - End of Week // 1..7, 1=Mo
float D = dt("EoW", float D) // Time

determined from the date the weekend.
mind The Variable: dt_VAR_Beginning_of_the_Week
therefore can weekend according to country adjusted go.
*/
SubProc dt.EoW
Parameters float D
Declare int wd, we
wd = dt("getDoW",D)
we = dt_VAR_Beginning_of_the_Week - 1
Case we < 1 : we = 7
While wd <> we
D = D + 1
Inc wd
Case wd > 7 : wd = 1
EndWhile
Return D
ENDPROC


/* Beginning of Year */
SubProc dt.BoY
Parameters float D
Return dt("SetDate",dt("GetYear",D),1,1)
ENDPROC


/* End of Year */
SubProc dt.EoY
Parameters float D
Return dt("SetDate",dt("GetYear",D),12,31)
ENDPROC


/* NToD How CToD$(), but with Zeitpunkten (D! -> YYYYMMDD) */
SubProc dt.NToD
Parameters float D
Return dt("GetYear",D) * 10000 + dt("GetMonth",D) * 100 + dt("GetDay",D)
ENDPROC


/* DToN How DToC$(), but with Zeitpunkten (YYYYMMDD -> D!) */
SubProc dt.DToN
Parameters long L
Declare float D
D = dt("SetYear", D, L \ 10000)
D = dt("SetMonth",D, (L mod 10000) \ 100)
D = dt("SetDay", D, L mod 100)
Return D
ENDPROC


/* ActualDay
supply whom actually day.
*/
SubProc dt.ActualDay
Return dt("GetDay",!now)
ENDPROC


/* ActualMonth
supply whom actually month.
*/
SubProc dt.ActualMonth
Return dt("GetMonth",!now)
ENDPROC


/* ActualYear
supply the actually year.
*/
SubProc dt.ActualYear
Return dt("GetYear",!now)
ENDPROC


/* DateAdd
float D = DateAdd( float D, long Days,Weeks,Months,Years )
add (or subtrahiere) days,weeks,months and years of/to that Time D!.
*/
SubProc dt.DateAdd
Parameters float D1, long aDays,aWeeks,aMonths,aYears
Declare long n, D,M,Y, i, d28, float D2
i = dt("D2n",D1,Addr(D),Addr(M),Addr(Y))
If (aMonths = 0) and (aYears = 0)
i = i + aDays + (aWeeks * 7)
Else
If D > 28
D28 = D - 28
D = 28
EndIf
Inc Y,aYears
Inc Y,(aMonths \ 12)
Inc M,(aMonths mod 12)
While (M < 1)
Inc M,12
Dec Y
EndWhile
While (M > 12)
Dec M,12
Inc Y
EndWhile
D2 = dt("setDate",Y,M,D)
i = dt("D2n",D2,Addr(D),Addr(M),Addr(Y))
If i <> -1
i = i + (d28 + aDays)
i = i + (aWeeks * 7)
EndIf
EndIf
Return dt("n2D",i,Addr(D),Addr(M),Addr(Y))
ENDPROC


/* DiffDate
DiffDate( float DA,DB, pointer Days,Months,Years )
supply The difference two data as D,M,Y.
(and as Return Value in Meet)
*/
SubProc dt.DiffDate
Parameters float DA,DB, pointer ptr_Days, ptr_Months, ptr_Years
Declare quadint erg, long n1,n2, D,M,Y, D1,M1,Y1, D2,M2,Y2

If DA > DB
n2 = dt("D2n",DB,Addr(D1),Addr(M1),Addr(Y1))
n1 = dt("D2n",DA,Addr(D2),Addr(M2),Addr(Y2))
erg = n1 - n2
Else
n1 = dt("D2n",DA,Addr(D1),Addr(M1),Addr(Y1))
n2 = dt("D2n",DB,Addr(D2),Addr(M2),Addr(Y2))
erg = n2 - n1
EndIf

If D2 < D1
Dec M2
If M2 < 1
Inc M2,12
Dec Y2
EndIf
Inc D2, dt("LastDayInMonth",M2,Y2)
EndIf
D = D2 - D1

If M2 < M1
Inc M2,12
Dec Y2
EndIf
M = M2 - M1
Y = Y2 - Y1

Case ptr_Days : Long ptr_Days,0 = D
Case ptr_Months : Long ptr_Months,0 = M
Case ptr_Years : Long ptr_Years,0 = Y

Return erg
ENDPROC


/* getDoW_Str
D = date
L = 1-short, 2-long
Language: "de", "en", "eo", "it", "it", "fr", "nl"
*/
SubProc dt.getDoW_Str
Parameters float D, int laenge, string Language
Declare int wd, string s, L,k
wd = dt("getDoW",D)
Select lower$(Language)
caseof "de"
L = "monday,tuesday,wednesday,thursday,friday,saturday,sunday" 'german
k = "Mo,Di,wen,Do,Fr,Sa,so"
caseof "en"
L = "Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday" 'english
k = "Mo,institute of technology,We,Th,Fr,Sa,Su"
caseof "eo"
L = "lundo,mardo,merkredo,jaudo,vendredo,sabato,dimanco" 'Esperanto
k = "?1,?2,?3,?4,?5,?6,?7"
caseof "it"
L = "lunes,martes,miércoles,jueves,viernes,sà bado,domingo" 'Español
k = "?1,?2,?3,?4,?5,?6,?7"
caseof "it"
L = "lunedì,martedì,mercoledì,giovedì,venerdì,sabato,domenica" 'italian
k = "?1,?2,?3,?4,?5,?6,?7"
caseof "fr"
L = "lundi,mardi,mercredi,jeudi,vendredi,samedi,dimanche" 'french
k = "?1,?2,?3,?4,?5,?6,?7"
caseof "nl"
L = "maandag,dinsdag,woensdag,donderdag,vrijdag,zaterdag,zondag" 'dutch
k = "?1,?2,?3,?4,?5,?6,?7"
otherwise
L = "monday,tuesday,wednesday,thursday,friday,saturday,sunday" 'german
k = "Mo,Di,wen,Do,Fr,Sa,so"
EndSelect
s = SubStr$(if(laenge=1,k,L), wd, ",")
Return s
ENDPROC


/* isWeekend
int bool = dt("isWeekend", D! )
mind: dt_VAR_Weekend_Days_one_Week Weekday -> weekend?
*/
SubProc dt.isWeekend
Parameters float D
Declare int wd, ok
ok = 0
wd = dt("getDoW",D)
Select wd
CaseOf 1 'Mo
Case dt_VAR_Weekend_Days_one_Week >= 7 : OK = 1
CaseOf 2 'Di
Case dt_VAR_Weekend_Days_one_Week >= 6 : OK = 1
CaseOf 3 'wen
Case dt_VAR_Weekend_Days_one_Week >= 5 : OK = 1
CaseOf 4 'Do
Case dt_VAR_Weekend_Days_one_Week >= 4 : OK = 1
CaseOf 5 'Fr
Case dt_VAR_Weekend_Days_one_Week >= 3 : OK = 1
CaseOf 6 'Sa
Case dt_VAR_Weekend_Days_one_Week >= 2 : OK = 1
CaseOf 7 'so
Case dt_VAR_Weekend_Days_one_Week >= 1 : OK = 1
EndSelect
Return ok
ENDPROC


/* isWorkday
int bool = dt("isWorkday", D! )
mind: dt_VAR_Weekend_Days_one_Week Weekday -> weekend?
*/
SubProc dt.isWorkday
Parameters float D
Declare int wd, ok
ok = 0
wd = dt("getDoW",D)
Select wd
CaseOf 1 'Mo
Case dt_VAR_Weekend_Days_one_Week < 7 : Ok = 1
CaseOf 2 'Di
Case dt_VAR_Weekend_Days_one_Week < 6 : Ok = 1
CaseOf 3 'wen
Case dt_VAR_Weekend_Days_one_Week < 5 : Ok = 1
CaseOf 4 'Do
Case dt_VAR_Weekend_Days_one_Week < 4 : Ok = 1
CaseOf 5 'Fr
Case dt_VAR_Weekend_Days_one_Week < 3 : Ok = 1
CaseOf 6 'Sa
Case dt_VAR_Weekend_Days_one_Week < 2 : Ok = 1
CaseOf 7 'so
Case dt_VAR_Weekend_Days_one_Week < 1 : Ok = 1
EndSelect
Return ok
ENDPROC


/* NextWorkday
D! = dt("NextWorkday",D!)
supply the date the next Werktages (isWorkday(): überspringe isWeekend()).
mind: dt_VAR_Weekend_Days_one_Week
*/
SubProc dt.NextWorkday
Parameters float D
Declare int wd
wd = dt("getDoW",D)
Repeat
D = D + 1
Inc wd
Case wd > 7 : wd = 1
Until dt("isWorkday",D)
Return D
ENDPROC


/* PrevWorkday
D! = dt("PrevWorkday",D!)
supply the date the previous Werktages (isWorkday(): überspringe isWeekend()).
mind: dt_VAR_Weekend_Days_one_Week
*/
SubProc dt.PrevWorkday
Parameters float D
Declare int wd
wd = dt("getDoW",D)
Repeat
D = D - 1
Dec wd
Case wd < 1 : wd = 7
Until dt("isWorkday",D)
Return D
ENDPROC


/* Sum_Workdays
Workdays = dt("Sum_Workdays",D1!,D2!, pointer ptr_Weekends )
supply The amount the Werktage/Wochenendtage between 2 data
mind: dt_VAR_Weekend_Days_one_Week
*/
SubProc dt.Sum_Workdays
Parameters float D1,D2, pointer ptr_Weekends
Declare float tmpf, D, long sum_WD, sum_WE, tmp, wks
Clear sum_WD, sum_WE
If D1 > D2
tmpf = D1
D1 = D2
D2 = tmpf
EndIf

// The days to the Startdatum
D = dt("BoW",D1)
If D <> D1
tmpf = D
WhileLoop Int(D1 - D)
If dt("isWorkday",tmpf)
Dec sum_WD
Else
Dec sum_WE
EndIf
tmpf = tmpf + 1
EndWhile
EndIf
D1 = D

// The days to the Enddatum
D = dt("EoW",D2)
If D <> D2
tmpf = D
WhileLoop Int(D - D2)
If dt("isWorkday",tmpf)
Dec sum_WD
Else
Dec sum_WE
EndIf
tmpf = tmpf - 1
EndWhile
EndIf
D2 = D

wks = Int(D2 - D1 + 1) \ 7
sum_WE = sum_WE + (wks * dt_VAR_Weekend_Days_one_Week)
sum_WD = sum_WD + (wks * (7 - dt_VAR_Weekend_Days_one_Week))
Case sum_WE < 0 : Inc sum_WE,7
Case sum_WD < 0 : Inc sum_WD,7

Case ptr_Weekends : Long ptr_Weekends,0 = sum_WE
Return sum_WD
ENDPROC


/* Yesterday
supply whom yesterday's day (!now-1) (Return float D)
*/
SubProc dt.Yesterday
Return !now - 1
ENDPROC


/* Today
supply whom present day (!now) (Return float D)
*/
SubProc dt.Today
Return !now
ENDPROC


/* Tomorrow
supply whom tomorrow's day (!now+1) (Return float D)
*/
SubProc dt.Tomorrow
Return !now + 1
ENDPROC


/* Upro f. Umrechnung D_float -> D_N
D! -> n
n = dt("D2n",D!,Addr(D),Addr(M),Addr(Y))
*/
SubProc dt.D2n
Parameters float D1, pointer pD,pM,pY
Declare long D,M,Y
Y = dt("getYear",D1)
M = dt("getMonth",D1)
D = dt("getDay",D1)
Case pY : Long pY,0 = Y
Case pM : Long pM,0 = M
Case pD : Long pD,0 = D
Var long n = -1
If Between(Y,1600,3999, M,1,12, D,1,dt("LastDayInMonth",M,Y))
If (Y = 1600) and (M < 3)
Case M = 2 : Inc D,31
Dec D
n = D
Else
n = D
If M > 2
Dec M,3
Else
Inc M,9
Dec Y
EndIf
Y = Y - 1600
n = n + 59 + (((Y \ 100) * 146097) >> 2) + (((Y mod 100) * 1461) >> 2) + ((M * 153 + 2) \ 5)
EndIf
EndIf
Return n
ENDPROC


/* Upro f. Umrechnung D:n -> D_float
n -> D!
D! = dt("n2D",n,Addr(D),Addr(M),Addr(Y))
*/
SubProc dt.n2D
Parameters long n, pointer pD,pM,pY
Declare long D,M,Y,i,j
If n > 59
i = ((n - 59) << 2) - 1
j = (((i mod 146097) >> 2) << 2) + 3
Y = (i \ 146097) * 100 + (j \ 1461)
i = (((j mod 1461) + 4 ) >> 2) * 5 - 3
M = i \ 153
D = (((i mod 153) + 5 ) \ 5)
If M < 10
Inc M,3
Else
Dec M,9
Inc Y
EndIf
Inc Y,1600
Else
D = n + 1
M = 1
Y = 1600
If D > 31
Dec D,31
Inc M
EndIf
EndIf
Case pY : Long pY,0 = Y
Case pM : Long pM,0 = M
Case pD : Long pD,0 = D
Return dt("SetDate",Y,M,D)
ENDPROC




/*
WeekdayStep:
The first part the mode-Strings contains: First,Prev,Next,Last
The second part is the desired week-day as short cut: Mo,Di,wen,Do,Fr,Sa,so, Mo,institute of technology,We,Th,Fr,Sa,Su
*/
/* WeekdayStep: Wochentage go through */
/* mode: - FirstMo - PrevDi - NextDo - LastSa */
SubProc dt.WeekdayStep
Parameters float D, string mode

Declare int fashion, WD, W, string WDay
mode = Lower$(mode) : WDay = Right$(mode,2) : WD = 1
Case InStr("ridge",mode) : fashion = 0
Case InStr("prev",mode) : fashion = 1
Case InStr("next",mode) : fashion = 2
Case InStr("last",mode) : fashion = 3
WhileLoop 1,14
If SubStr$("mo,di,wen,do,fr,sa,so,mo,institute of technology,we,th,fr,sa,su", &Loop, ",") = WDay
Case &Loop <= 7 : WD = &Loop - 1
Case &Loop > 7 : WD = &Loop - 8
BREAK
EndIf
EndWhile

// Korrektur of the day
Case fashion = 0 : D = dt("BoM",D) // First
Case fashion = 3 : D = dt("EoM",D) // Last

While WD < 0 : Inc WD,7 : EndWhile : WD = WD mod 7 : Inc WD
W = dt("getDoW",D!)
Select fashion
CaseOf 0 // First
While W <> WD
D = D + 1
Inc W
Case W > 7 : W = 1
EndWhile
CaseOf 1 // Prev
Repeat
D = D - 1
Dec W
Case W < 1 : W = 7
Until W = WD
CaseOf 2 // Next
Repeat
D = D + 1
Inc W
Case W > 7 : W = 1
Until W = WD
CaseOf 3 // Last
While W <> WD
D = D - 1
Dec W
Case W < 1 : W = 7
EndWhile
EndSelect
Return D
ENDPROC

/* only to Vereinfachung with adopted */
SubProc dt.FirstMo : Parameters float D : Return dt("WeekdayStep",D,"FirstMo") : ENDPROC
SubProc dt.FirstDi : Parameters float D : Return dt("WeekdayStep",D,"FirstDi") : ENDPROC
SubProc dt.FirstMi : Parameters float D : Return dt("WeekdayStep",D,"FirstMi") : ENDPROC
SubProc dt.FirstDo : Parameters float D : Return dt("WeekdayStep",D,"FirstDo") : ENDPROC
SubProc dt.FirstFr : Parameters float D : Return dt("WeekdayStep",D,"FirstFr") : ENDPROC
SubProc dt.FirstSa : Parameters float D : Return dt("WeekdayStep",D,"FirstSa") : ENDPROC
SubProc dt.FirstSo : Parameters float D : Return dt("WeekdayStep",D,"FirstSo") : ENDPROC
SubProc dt.FirstTu : Parameters float D : Return dt("WeekdayStep",D,"FirstTu") : ENDPROC
SubProc dt.FirstWe : Parameters float D : Return dt("WeekdayStep",D,"FirstWe") : ENDPROC
SubProc dt.FirstTh : Parameters float D : Return dt("WeekdayStep",D,"FirstTh") : ENDPROC
SubProc dt.FirstSu : Parameters float D : Return dt("WeekdayStep",D,"FirstSu") : ENDPROC

SubProc dt.PrevMo : Parameters float D : Return dt("WeekdayStep",D,"PrevMo") : ENDPROC
SubProc dt.PrevDi : Parameters float D : Return dt("WeekdayStep",D,"PrevDi") : ENDPROC
SubProc dt.PrevMi : Parameters float D : Return dt("WeekdayStep",D,"PrevMi") : ENDPROC
SubProc dt.PrevDo : Parameters float D : Return dt("WeekdayStep",D,"PrevDo") : ENDPROC
SubProc dt.PrevFr : Parameters float D : Return dt("WeekdayStep",D,"PrevFr") : ENDPROC
SubProc dt.PrevSa : Parameters float D : Return dt("WeekdayStep",D,"PrevSa") : ENDPROC
SubProc dt.PrevSo : Parameters float D : Return dt("WeekdayStep",D,"PrevSo") : ENDPROC
SubProc dt.PrevTu : Parameters float D : Return dt("WeekdayStep",D,"PrevTu") : ENDPROC
SubProc dt.PrevWe : Parameters float D : Return dt("WeekdayStep",D,"PrevWe") : ENDPROC
SubProc dt.PrevTh : Parameters float D : Return dt("WeekdayStep",D,"PrevTh") : ENDPROC
SubProc dt.PrevSu : Parameters float D : Return dt("WeekdayStep",D,"PrevSu") : ENDPROC

SubProc dt.NextMo : Parameters float D : Return dt("WeekdayStep",D,"NextMo") : ENDPROC
SubProc dt.NextDi : Parameters float D : Return dt("WeekdayStep",D,"NextDi") : ENDPROC
SubProc dt.NextMi : Parameters float D : Return dt("WeekdayStep",D,"NextMi") : ENDPROC
SubProc dt.NextDo : Parameters float D : Return dt("WeekdayStep",D,"NextDo") : ENDPROC
SubProc dt.NextFr : Parameters float D : Return dt("WeekdayStep",D,"NextFr") : ENDPROC
SubProc dt.NextSa : Parameters float D : Return dt("WeekdayStep",D,"NextSa") : ENDPROC
SubProc dt.NextSo : Parameters float D : Return dt("WeekdayStep",D,"NextSo") : ENDPROC
SubProc dt.NextTu : Parameters float D : Return dt("WeekdayStep",D,"NextTu") : ENDPROC
SubProc dt.NextWe : Parameters float D : Return dt("WeekdayStep",D,"NextWe") : ENDPROC
SubProc dt.NextTh : Parameters float D : Return dt("WeekdayStep",D,"NextTh") : ENDPROC
SubProc dt.NextSu : Parameters float D : Return dt("WeekdayStep",D,"NextSu") : ENDPROC

SubProc dt.LastMo : Parameters float D : Return dt("WeekdayStep",D,"LastMo") : ENDPROC
SubProc dt.LastDi : Parameters float D : Return dt("WeekdayStep",D,"LastDi") : ENDPROC
SubProc dt.LastMi : Parameters float D : Return dt("WeekdayStep",D,"LastMi") : ENDPROC
SubProc dt.LastDo : Parameters float D : Return dt("WeekdayStep",D,"LastDo") : ENDPROC
SubProc dt.LastFr : Parameters float D : Return dt("WeekdayStep",D,"LastFr") : ENDPROC
SubProc dt.LastSa : Parameters float D : Return dt("WeekdayStep",D,"LastSa") : ENDPROC
SubProc dt.LastSo : Parameters float D : Return dt("WeekdayStep",D,"LastSo") : ENDPROC
SubProc dt.LastTu : Parameters float D : Return dt("WeekdayStep",D,"LastTu") : ENDPROC
SubProc dt.LastWe : Parameters float D : Return dt("WeekdayStep",D,"LastWe") : ENDPROC
SubProc dt.LastTh : Parameters float D : Return dt("WeekdayStep",D,"LastTh") : ENDPROC
SubProc dt.LastSu : Parameters float D : Return dt("WeekdayStep",D,"LastSu") : ENDPROC


/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
Proc Calendar
Parameters int Y
Declare int DoY, float dd, LastDat, xmas, adv4, ea, septua, trini_stop, string Kalenderdatei, xx
adv4 = dt("Advent4",Y) : trini_stop = adv4 - 35 // end the Trinitatis-Sonntage (week to memorial day)
ea = dt("Easter",Y) : septua = ea - 63 // end the Epiphanias-Sonntage (week to Septuagesimä)

Proc Fix
Parameters int d,m,y, string s
declare int DoY
LastDat = dt("setDate",y,m,d)
doy = dt("getDoY",LastDat) + 1000
AddStrings(0,st$(doy) $ " | " $ dt("DateTimeStr","dd.mm.yyyy (ddd) | ",LastDat) $ s)
ENDPROC
Proc Vari
Parameters float there, string s
declare int DoY
LastDat = there
doy = dt("getDoY",LastDat) + 1000
AddStrings(0,st$(doy) $ " | " $ dt("DateTimeStr","dd.mm.yyyy (ddd) | ",LastDat) $ s)
ENDPROC

ClearList 0
fix( 1, 1,Y,"new year [F]")
dd = dt("NextSo",LastDat) : Case dt("getDoY",dd) < 6 : vari(dd,"So. n. Neujahr")
fix( 6, 1,Y,"Hl. 3 Könige (Epiphanias) [f;BW,BY,ST]")
dd = dt("NextSo",LastDat)
WhileLoop 1,6 : Case dd < septua : vari(dd, &Loop $ ". So. n. Epiphanias") : dd = dt("NextSo",dd) : EndWhile
fix( 2, 2,Y,"Mariä Lichtmeß")
fix(14, 2,Y,"valentine")
fix(25, 3,Y,"Mariä Verkündigung")
fix(30, 4,Y,"Walpurgisnacht")
fix(24, 6,Y,"Johannistag")
fix(27, 6,Y,"Siebenschläfer")
fix(29, 6,Y,"Peter and Paul")
fix(15, 8,Y,"Mariä Himmelfahrt [f;BY,SL]")
fix(24, 8,Y,"Bartholomäustag")
fix( 1, 9,Y,"Ägidii")
fix( 8, 9,Y,"Mariä birth")
fix(29, 9,Y,"Michaelis")

' in the year 2017, the 500. year the Beginns the Reformation,
' is the 31. october einmalig one gesamtdeutscher
' gesetzlicher holiday.
if (Y = 2017)
fix(31,10,Y,"Reformationstag [F]")
Else
fix(31,10,Y,"Reformationstag [f;BB,MV,SN,ST,TH]")
EndIf
fix(31,10,Y,"Halloween")
fix( 1,11,Y,"all saints' days [f;BW,BY,NW,RP,SL]")
fix( 2,11,Y,"all souls' days")
fix(11,11,Y,"Martinstag (Martini)")
fix( 6,12,Y,"Nikolaus")
fix( 8,12,Y,"Mariä Empfängnis")
fix(26,12,Y,"2. Weihnachtsfeiertag [F]")
fix(31,12,Y,"New Year's Eves")

// Jahreszeiten
fix(21, 3,Y,"Frühlings-equinox")
fix(21, 6,Y,"summer-Sonnenwende")
fix(22, 9,Y,"autumn-equinox")
fix(21,12,Y,"winter-Sonnenwende")

// Sternzeichen
fix(21, 1,Y,"Sternzeichen Wassermann")
fix(20, 2,Y,"Sternzeichen Fische")
fix(21, 3,Y,"Sternzeichen Widder")
fix(21, 4,Y,"Sternzeichen Stier")
fix(21, 5,Y,"Sternzeichen twins")
fix(22, 6,Y,"Sternzeichen cancer")
fix(23, 7,Y,"Sternzeichen Löwe")
fix(24, 8,Y,"Sternzeichen virgin")
fix(24, 9,Y,"Sternzeichen balance")
fix(24,10,Y,"Sternzeichen scorpion")
fix(23,11,Y,"Sternzeichen Schütze")
fix(22,12,Y,"Sternzeichen Steinbock")

Case Y >= 1934 : fix( 1, 5,Y,"Maifeiertag [F]")
Case Y >= 1964 : fix( 5, 5,Y,"Europatag (formation the Europarates 1949)")
Case Y >= 1985 : fix( 9, 5,Y,"Europatag (Schuman-Statement (1950), mündete in EGKS u later EU)")
If Between(Y,1954,1990)
fix(17, 6,Y,"day the german unity [F]")
ElseIf Y >= 1991
fix(17, 6,Y,"day the german unity [Gedenktag]")
EndIf
Case Y >= 1990 : fix( 3,10,Y,"day the german unity [F]")

// Sommerzeit
vari( dt("LastSo",dt("setDate",Y, 3,1)), "beginning the Sommerzeit (MESZ)") // last SO in the March
vari( dt("LastSo",dt("setDate",Y,10,1)), "end the Sommerzeit (Normalzeit) (MEZ)") // last SO in the october

// Muttertag
Case Y >= 1933 : vari( dt("FirstSo",dt("setDate",Y,5,1)) + 7, "Muttertag") // zweiter SO in the May (ploy: first SO + 7)

// Erntedank rk & ev
Case Y >= 1972 : vari( dt("FirstSo",dt("setDate",Y,9,1)), "Erntedankfest (1. SO i Sept) [rk]")
Case Y >= 1770 : vari( dt("NextSo",dt("setDate",Y,9,29)), "Erntedankfest (SO n Michaelis) [ev]")

// Trinitatis-Sonntage (1..27)
If Y >= 1334
dd = ea + 56 + 7
WhileLoop 1,27
Case dd < trini_stop : vari(dd, &Loop $ ". So. n. Trinitatis")
dd = dd + 7
EndWhile
EndIf


// Advent
' adv4 = dt("Advent4",Y)
fix(25,12,Y,"1. Weihnachtsfeiertag [F]")
xmas = LastDat
If (LastDat - 1) = adv4
fix(24,12,Y,"4. Advent and Heiligabend")
Else
fix(24,12,Y,"Heiligabend")
vari(adv4,"4. Advent")
EndIf
Case dt("getDoW",xmas) <= 5 : vari(dt("NextSo",xmas),"So. n. Weihnachten")
vari(adv4 - 7 ,"3. Advent")
vari(adv4 - 14,"2. Advent")
vari(adv4 - 21,"1. Advent")
vari(adv4 - 28,"Totensonntag (Ewigkeitssonntag) [G]")
vari(adv4 - 28,"Christkönigsfest [rk]")
If Between(Y,1934,1938)
vari(adv4 - 32,"Buß- and Bettag [F]")
ElseIf Between(Y,1946,1951)
vari(adv4 - 32,"Buß- and Bettag [f;BE,BW,HB,HE,HH,NI,NW,RP,SH,SL]")
ElseIf Between(Y,1952,1980)
vari(adv4 - 32,"Buß- and Bettag [f;BE,BW,BY(ev),HB,HE,HH,NI,NW,RP,SH,SL]")
ElseIf Between(Y,1981,1989)
vari(adv4 - 32,"Buß- and Bettag [f;BE,BW,BY,HB,HE,HH,NI,NW,RP,SH,SL]")
ElseIf Between(Y,1990,1994)
vari(adv4 - 32,"Buß- and Bettag [F;BE,BW,BY,HB,HE,HH,NI,NW,RP,SH,SL,BB,MV,SN,ST,TH]")
ElseIf Y >= 1995
vari(adv4 - 32,"Buß- and Bettag [f;SN]")
EndIf
vari(adv4 - 35,"memorial day")
vari(adv4 - 42,"Drittletzter SO the Kirchenjahres")


// Easter
' ea = dt("Easter",Y)
vari(ea - 52,"Weiberfastnacht (Schmotziger DO) (-Karneval-)")
vari(ea - 51,"Rußiger friday (-Karneval-)")
vari(ea - 50,"Nelkensamstag (Schmalziger SA) (-Karneval-)")
vari(ea - 49,"Tulpensonntag (Herrenfastnacht) (-Karneval-)")
vari(ea - 48,"Rosenmontag (-Karneval-)")
vari(ea - 47,"shrovetide carnival (Veilchendienstag) (-Karneval-)")
vari(ea - 46,"Aschermittwoch (Beginn the Lent) (-Karneval-)")

vari(ea - 63,"Septuagesimae (9.so v Easter)")
vari(ea - 56,"Sexagesimae (8.so v Easter)")
vari(ea - 49,"Estomihi (7.so v Easter)")
vari(ea - 42,"Invokavit (6.FastenSo v Easter)")
vari(ea - 35,"Reminiscere (5.FastenSo v Easter)")
vari(ea - 28,"Okuli (4.FastenSo v Easter)")
vari(ea - 21,"Laetare (3.FastenSo v Easter)")
vari(ea - 14,"Judica (2.FastenSo v Easter)")
vari(ea - 8,"[en] (Sat. of Lazarus)")
vari(ea - 7,"Palmsonntag (1.FastenSo v Easter)")
vari(ea - 3,"maundy thursday")
vari(ea - 2,"Karfreitag [F]")
vari(ea - 1,"Karsamstag (Ostersamstag)")
vari(ea ,"Easter Sunday (rk:1.so the Osterzeit) [f;BB]")
vari(ea + 1,"Easter Monday [F]")
vari(ea + 7,"Quasimodogeniti (ev:1.so n Easter)(rk:2.so the Osterzeit/Weißer sunday)")
vari(ea + 14,"Misericordias Domini (ev:2.so n Easter)(rk:3.so the Osterzeit)")
vari(ea + 21,"Jubilate (ev:3.so n Easter)(rk:4.so the Osterzeit)")
vari(ea + 28,"Kantate (ev:4.so n Easter)(rk:5.so the Osterzeit)")
vari(ea + 35,"Rogate (ev:5.so n Easter)(rk:6.so the Osterzeit)")
vari(ea + 39,"Christi Himmelfahrt (Vatertag/Herrentag) [F]")
vari(ea + 42,"Exaudi (ev:6.so n Easter)(rk:7.so the Osterzeit)")
vari(ea + 49,"Pfingstsonntag (7.so n Easter) [f;BB]")
vari(ea + 50,"Pfingstmontag [F]")
vari(ea + 53,"corpus christi day (Corpus Domini, Corpus Christi) [f;BW,BY,HE,NW,RP,SL]")

Case Y >= 1856 : vari(ea + 63,"marrow Jesu solid (2. SO n Pentecost)")
Case Y >= 1334 : vari(ea + 56,"Trinitatis (8. so n Ostern; 1. SO n Pentecost) Dreifaltigkeit/Dreieinigkeit")


SortList 1

' Kalenderdatei
Declare int err
MkDir "C:\TEMP"
err = %IOResult
Kalenderdatei = "C:\TEMP\KALENDER_" $ Y $ "_TEMP.txt"
Move("ListToFile",Kalenderdatei)
ClearList
Shell "NotePad " $ Kalenderdatei
ENDPROC


Proc Test
Declare d1!,d2!,d!,Y%, e%

Proc show
Parameters float d, string s
Print dt("DateTimeStr", " ddd', the 'dd. mmmm yyyy; (", d ) $ dt("getDoW",d) $ "); " $ s
ENDPROC

Proc show2
Parameters float d1,d2, string s
Print dt("DateTimeStr", " dd.mm.yyyy (ddd)(", d1 ) $ dt("getDoW",d1) $ "); " $ s $ dt("DateTimeStr", " dd.mm.yyyy (ddd)(", d2 ) $ dt("getDoW",d2) $ "); "
ENDPROC

Cls
d2! = !now
Y% = dt("GetYear",d2!)
Print "Advent4"
d1! = dt("Advent4",Y%)
show(d1!, "4. Advent")
show(d1! - 7, "3. Advent")
show(d1! - 14, "2. Advent")
show(d1! - 21, "1. Advent")
show(d1! - 28, "Totensonntag")
show(d1! - 32, "Buß- and Bettag")
show(d1! - 35, "memorial day")
Print "BoW - Beginning Of Week"
show2( dt("BoW",d1!), dt("EoW",d1!), "(BoW)")
Print "BoM/EoM - Beginning/End Of Month"
show2( dt("BoM",d1!), dt("EoM",d1!), "(BoM)")
Print "BoQ - Beginning Of Quarter"
show2( dt("BoQ",d1!), dt("EoQ",d1!), "(BoQ)")
whileloop 1,4
show2( dt("BoQ",2016,&loop), dt("EoQ",2016,&loop), "(BoQ) " $ &loop $ ".Q.")
endwhile
Print "BoY - Beginning Of Year"
show2( dt("BoY",d1!), dt("EoY",d1!), "(BoY)")
Print "Easter"
d1! = dt("Easter",Y%)
show(d1!, "Easter Sunday")
show(dt("bow",d1!), "Mo")
show(dt("eow",d1!), "so")

' d2! = dt("FirstSo",d1!)
' whileloop 1,4
' show(d2!, &loop $ ". so")
' d2! = dt("NextSo",d2!)
' endwhile
'WaitInput
Print "LastDayInMonth"
Print " ";dt("LastDayInMonth",1,2017);
WhileLoop 2,12
Print ", ";dt("LastDayInMonth",&loop,2017);
EndWhile
Print ""
WaitInput


If dt("Quarter",!now) <= 2
' Vorjahr and News year
Calendar( dt("getYear",!now) - 1 )
Calendar( dt("getYear",!now) )
Else
' News year and nächstes year
Calendar( dt("getYear",!now) )
Calendar( dt("getYear",!now) + 1 )
EndIf

WaitInput
ENDPROC

Proc Test2
Declare float d1,d2, long n1, D,M,Y, string s1

Proc show
Parameters float d, string s
Print dt("DateTimeStr", " ddd', the 'dd. mmmm yyyy; (", d ) $ dt("getDoW",d) $ "); " $ s
ENDPROC

Proc show2
Parameters float d1,d2, string s
Print dt("DateTimeStr", " dd.mm.yyyy (ddd)(", d1 ) $ dt("getDoW",d1) $ dt("getDoW_Str",d1,1,"de") $ "); " $ s$ $ dt("DateTimeStr", " dd.mm.yyyy (ddd)(", d2 ) $ dt("getDoW",d2) $ dt("getDoW_Str",d2,1,"de") $ "); "
ENDPROC

d2 = !now
show( d2, "(!now)")
d1 = dt("Advent4",d2)
show( d1, "4. Advent")
show( d1 - 7, "3. Advent")
show( d1 - 14, "2. Advent")
show( d1 - 21, "1. Advent")
show( d1 - 28, "Totensonntag")
show( d1 - 32, "Buß- and Bettag")
show( d1 - 35, "memorial day")
WhileLoop 1,12
d1 = dt("setMonth",d1,&loop)
show2( dt("BoM",d1), dt("EoM",d1),"BOM/" $ dt("quarter",d1) $ "/EOM")
EndWhile
waitinput
Print ""
d1 = dt("Easter",d2)
show( d1, "Easter")
show2( dt("BoQ",d1), dt("EoQ",d1),"BOQ/" $ dt("quarter",d1) $ "/EOQ")
WhileLoop 1,4
d1 = dt("BoQ",2017,&loop)
show2( dt("BoQ",d1), dt("EoQ",d1),"BOQ/" $ dt("quarter",d1) $ "/EOQ")
EndWhile
d1 = !now
show2( dt("BoW",d1), dt("EoW",d1),"BOW/(now)/EOW")
show2( dt("BoY",d1), dt("EoY",d1),"BOY//EOY")
show( dt("dton",20171003), "DToC$('20171003')")
Print " and back..." $ dt("ntod",dt("dton",20171003))
d2 = !now
show( d2, "(!now)")
Print " " $ dt("ActualDay") $ "." $ dt("ActualMonth") $ "." $ dt("ActualYear")
d1 = !now
show( dt("dateadd",d1, 0,1,0,0), "1 week")
show( dt("dateadd",d1, 0,-2,0,1), "-2 where, 1 year")

show2( !now, !now + 70,"/70 days/")
Print " Difference: ", dt("DiffDate",!now, !now + 70, Addr(D),Addr(M),Addr(Y))
Print " days: ";D;", months: ";M;", years: ";Y
waitinput
Print ""
d1 = !now
WhileLoop 0,9
s1 = if(dt("isWorkday",d1),"Werktag","")
s1 = s1 + if(dt("isWeekend",d1),"weekend","")
show( d1, s1)
d1 = d1 + 1
EndWhile
d1 = dt("setDate",2017,8,18)
show( dt("PrevWorkday",d1), "vorheriger Werktag")
show( d1, "current day")
show( dt("NextWorkday",d1), "following Werktag")

Print "\n ...now with Änderung the variables"
dt_VAR_Beginning_of_the_Week = 7
dt_VAR_Weekend_Days_one_Week = 1
d1 = !now
WhileLoop 0,9
s1 = if(dt("isWorkday",d1),"Werktag","")
s1 = s1 + if(dt("isWeekend",d1),"weekend","")
show( d1, s1)
d1 = d1 + 1
EndWhile
waitinput
Print ""
d1 = dt("setDate",2017,8,18)
show( dt("PrevWorkday",d1), "vorheriger Werktag")
show( d1, "current day")
show( dt("NextWorkday",d1), "following Werktag")
Print ""
show( dt("Yesterday"), "yesterday (Yesterday)")
show( dt("Today"), "current day (Today)")
show( dt("Tomorrow"), "tommorrow (Tomorrow)")

dt_VAR_Beginning_of_the_Week = 1
dt_VAR_Weekend_Days_one_Week = 2

d1 = dt("setDate",2017,8,14,!now)
d2 = dt("setDate",2017,8,27,!now)
Print " " $ dt("Sum_Workdays",d1,d2,addr(n1)) $ " Werktage and " $ n1 $ " Wochendtage."
Print "\n\n\n\nEnde 2"

waitinput

ENDPROC


Test2
Test
end
 
Alle Sprachen
System: Windows 8/10, XProfan X4
Programmieren, das spannendste Detektivspiel der Welt.
08/19/17  
 




Michael
W.
...Perhaps fließt of it Yes something solid into Datums-functions of Profan with one.
 
Alle Sprachen
System: Windows 8/10, XProfan X4
Programmieren, das spannendste Detektivspiel der Welt.
08/19/17  
 



Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

no Systemprofil laid out. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Please register circa a Posting To verfassen.
 

Topic-Options

7.326 Views

Untitledvor 0 min.
Uwe Lang12/27/24
p.specht07/31/22
Langer01/01/22
Peter Max Müller11/18/21
More...

Themeninformationen

this Topic has 1 subscriber:

Michael W. (3x)


Admins  |  AGB  |  Applications  |  Authors  |  Chat  |  Privacy Policy  |  Download  |  Entrance  |  Help  |  Merchantportal  |  Imprint  |  Mart  |  Interfaces  |  SDK  |  Services  |  Games  |  Search  |  Support

One proposition all XProfan, The there's!


My XProfan
Private Messages
Own Storage Forum
Topics-Remember-List
Own Posts
Own Topics
Clipboard
Log off
 Deutsch English Français Español Italia
Translations

Privacy Policy


we use Cookies only as Session-Cookies because of the technical necessity and with us there no Cookies of Drittanbietern.

If you here on our Website click or navigate, stimmst You ours registration of Information in our Cookies on XProfan.Net To.

further Information To our Cookies and moreover, How You The control above keep, find You in ours nachfolgenden Datenschutzerklärung.


all rightDatenschutzerklärung
i want none Cookie