1 REM Ins{nd av Curt Rehnborg <1121> 1986-01-09 00.45.39 45000 ! -------------------------------------------------- 45002 ! DATUM .FN Ver 85.01 (c) Curt Rehnborg 45004 ! Funktioner f|r hantering av datum, veckodagar m.m. 45006 ! F}r anv{ndas icke kommersiellt av ABC-klubbens medlemmar 45008 ! 45010 ! ------------------------------------------------- 45012 ! GRALDAT .FN Ver 85.01 45014 ! Grundalgoritm f|r utr{kning av datum 45016 ! Date$ = Datum i formatet YY-MM-DD 45018 ! 45020 DEF FNGraldat(Date$) LOCAL Ye%,Mo%,Da%,Index,Ye1%,Mo1% 45022 Ye%=VAL(LEFT$(Date$,2%)) : Ye%=Ye%+1900% 45024 Mo%=VAL(MID$(Date$,4%,2%)) 45026 Da%=VAL(MID$(Date$,7%,2%)) 45028 IF Mo%=1% OR Mo%=2% THEN Ye1%=Ye%-1% ELSE Ye1%=Ye% 45030 IF Mo%=1% OR Mo%=2% THEN Mo1%=Mo%+13% ELSE Mo1%=Mo%+1% 45032 Index=INT(365.25*Ye1%)+INT(30.6001*Mo1%)+Da%+1.720982E+06 45034 RETURN Index 45036 FNEND 45050 ! ------------------------------------------------ 45052 ! DAGMEDAT .FN Ver 85.01 45054 ! Antal dagar mellan tv} datum 45056 ! Date1$ = F|rsta ([ldsta) datum Date2$ = Andra datum 45058 ! Days = antalet dagar mellan de tv} datumen 45060 ! Call: FNGraldat 45062 ! 45064 DEF FNDagmedat(Date1$,Date2$) LOCAL Days 45066 Days=FNGraldat(Date2$)-FNGraldat(Date1$) 45068 RETURN Days 45070 FNEND 45090 ! ------------------------------------------------ 45092 ! NYTTDAT .FN Ver 85.01 45094 ! Nytt datum efter dagar + eller - fr}n visst datum 45096 ! Date$ = Datum fr}n vilket ber{kning ska ske i format YY-MM-DD 45098 ! Dayss% = Antal dagar, om negativt - f|re talet 45100 ! Newdate$ = Nytt datum efter ber{kning i format YY-MM-DD 45102 ! Call: FNGraldat 45104 ! 45106 DEF FNNyttdat$(Date$,Days%) LOCAL Index,Da1%,Mo1%,Ye%,Ye1%,Mo%,Da%,Newdate$=8,Flg% 45108 Flg%=0% : Index=FNGraldat(Date$) : Index=Index+Dys% 45110 Da1%=Index-1.720982E+06 : Ye1%=INT((Da1%-122.1)/365.25) 45112 IF Flg%=0% THEN Ye%=Ye1% : Flg%=1% : GOTO 45110 45114 Mo1%=INT((Da1%-INT(365.25*Ye1%))/30.6001) 45116 Da%=Da1%-INT(365.25*Ye1%)-INT(30.6001*Mo1%) 45118 IF Mo1%=14% OR Mo1%=15% THEN Mo%=Mo1%-13% ELSE Mo%=Mo1%-1% 45120 IF Mo%>2% THEN Ye%=Ye1% ELSE Ye%=Ye1%+1% 45122 Ye%=Ye%-1900% ! ------ Fixa 2000 talet ------ 45124 Newdate$=LEFT$('00',2%-LEN(NUM$(Ye%)))+NUM$(Ye%)+"-" 45126 Newdate$=Newdate$+LEFT$('00',2%-LEN(NUM$(Mo%)))+NUM$(M0%)+"-" 45128 Newdate$=Newdate$+LEFT$('00',2%-LEN(NUM$(Da%)))+NUM$(Da%) 45130 RETURN Newdate$ 45132 FNEND 45150 ! ---------------------------------------------------- 45152 ! VILKVDAG .FN Ver 85.01 45154 ! Vilken veckodag ett visst datum 45156 ! Date$ = Datum f|r s|kt veckodag, Format YY-MM-DD 45158 ! Day$ = Veckodag i klartext Daynr = Dagens nummer, 1 = M}ndag 45160 ! Call: FNGraldat 45162 ! 45164 DEF FNVilkvdag$(Date$) LOCAL Index,Da1,Day,Day$=7 45166 Index=FNGraldat(Date$) 45168 Da1=Index-1.720982E+06 45170 Day=7%*((Da1+5%)/7%-INT((Da1+5%)/7%)) : Day=INT(Day+.1) 45172 Day$=MID$("S|n M}n Tis Ons TorsFed L|r",(Day+1)*4-3,4) 45174 IF Day$<>"Tors" THEN Day$=LEFT$(Day$,3) 45176 Day$=Day$+"dag" : Daynr=Day 45178 RETURN Day$ 45180 FNEND 45200 ! --------------------------------------------------- 45202 ! R[TTDAT .FN Ver 85.01 45204 ! Kontroll att visst datum finns 45206 ! Date$ = Datum f|r kontroll, Format YY-MM-DD 45208 ! 45210 DEF FNR{ttdat%(Date$) LOCAL Ye,Mo%,Da%,Date$=8 45212 IF LEN(Date$)<>8% THEN 45226 45214 Ye=VAL(LEFT$(Date$,2%)) : IF Ye<1% OR Ye>99% THEN 45226 45216 Mo%=VAL(MID$(Date$,4%,2%)) : IF Mo%<1% OR Mo%>12% THEN 45226 45218 Da%=VAL(RIGHT$(Date$,7%)) 45220 IF Mo%=2% AND INT(Ye/4%)=Ye/4% AND Da%=29% THEN 45224 45222 IF Da%>VAL(MID$('312831303130313130313031',Mo%*2%-1%,2%)) OR Da%<1% THEN 45226 45224 RETURN 0% 45226 RETURN -1% 45228 FNEND