Source / code snippets | | | |  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
|
| | | | |
| |  Michael W. | ...Perhaps fließt of it Yes something solid into Datums-functions of Profan with one. |
| | | | |
|
Zum QuelltextThemeninformationenthis Topic has 1 subscriber: |