/* ermittelt Wochentag eines Datums */Parse Arg Datum Fehler="" WTag.0=7 WTag.1="Samstag" WTag.2="Sonntag" WTag.3="Montag" WTag.4="Dienstag" WTag.5="Mittwoch" WTag.6="Donnerstag" WTag.7="Freitag" Tag=Left(Datum,2) Monat=Substr(Datum,4,2) Jahr=Right(Datum,4)
Select when Tag < 1 | Tag > 31 Then Say "Tag falsch" when Monat < 1 | Monat > 12 Then Say "Monat falsch" when Jahr < 1582 Then Say "Jahr falsch" when Jahr = 1582 & Monat < 10 Then Say "Jahr falsch" when Jahr = 1582 & Monat = 10 & Tag < 15 Then Say "Jahr falsch" Otherwise Call Start End Return Start: von=Tag+31*(Monat-1)+Jahr*365 If Monat < 3 Then von=von+Trunc((Jahr-1)/4)-Tru nc(.75+Trunc((Jahr-1)/100)*.7 5) Else von=von-Trunc(.4*Monat+2.3)+T runc(Jahr/4)-Trunc(.75+Trunc( Jahr/100)*.75) Days=von Call DaysToDate Wvon=von//7+1 Say WTag.Wvon||", "||NTage||"."||NMonat||"."||N Jahr||" ["||Datum||": "||Days||"]" Return DaysToDate: NJahr=Trunc(Days/365.242864) Rest=Days//(NJahr*365) Rest2=Rest-Trunc((NJahr-1)/4) +Trunc(.75+Trunc((NJahr-1)/10 0)*.75)-1 NMonat=Trunc(Rest2/31)+1 NTage=Rest2-(31*(NMonat-1))+1 If NMonat > 2 | (NMonat=2 & Tage=0) Then Do Rest2=Rest+Trunc(.4*NMonat+2. 3)-Trunc(NJahr/4)+Trunc(.75+T runc(NJahr/100)*.75)-1 NMonat=Trunc(Rest2/31)+1 NTage=Rest2-(31*(NMonat-1))+1 End If NTage = 31 & (NMonat = 4 | NMonat = 6 | NMonat = 9 | NMonat = 11) Then Do NTage = 1 NMonat = NMonat + 1 End If NMonat = 2 & NTage > 28 Then Do Regeltage=28 If NJahr//4 = 0 Then Regeltage=Regeltage+1 If NJahr//100 = 0 Then Regeltage=Regeltage-1 If NJahr//400 = 0 Then Regeltage=Regeltage+1 If NTage > Regeltage Then Do NMonat = 3 NTage = NTage-Regeltage End End Return
[ Leser: 50 ] |