10
20
30
40
50
60
70
80 :
90 :
100
110
120
130 :
140 DEFFNDay(A%):=MID$("000SunMonTueWedThuFriSat",A%*3+1,3)
150 DEFFNMon(A%):=MID$("000JanFebMarAprMayJunJulAugSepOctNovDecDDDEEEFFF",A%*3+1,3)
160 :
170 :
180
190
200
210 :
220 DEFFNDate_FromDay(A$):A$=FNuc(A$)
230 A%=INSTR("SUNMONTUEWEDTHUFRISAT",LEFT$(A$,3))
240 IF(A%-1)MOD3=0:=A%DIV3+1 ELSE =0
250 :
260 DEFFNDate_FromMonth(A$):A$=FNuc(A$)
270 A%=INSTR("JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC",LEFT$(A$,3))
280 IF(A%-1)MOD3=0:=A%DIV3+1 ELSE =0
290 :
300 :
310
320
330
340 :
350 DEFFNDate_ToDay(A%)
360 =MID$("SunMonTuesWednesThursFriSatur",VALMID$("01040711172225",A%*2-1,2),VALMID$("3346535",A%,1))+"day"
370 :
380 DEFFNDate_ToMonth(A%)
390 =MID$("JanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember",VALMID$("010816212629333743525967",A%*2-1,2),VALMID$("785534469788",A%,1))
400 :
410 :
420
430
440
450 :
460 DEFFNDate_DayOfWeek(d%,m%,y%):y%=y%MOD400
470 =(y%*365.25+m%*30+d%+VALMID$("120112234455",m%,1)+((y%MOD4)=0)-((y%-1)DIV100)-(m%>2AND((y%MOD4)=0AND(y%MOD100)<>0ORy%=0))+3)MOD7+1
480 :
490 :
500
510
520
530
540
550
560
570 :
580 DEFPROCDate_FromOrd(mem%,d%,m%,y%,hr%,mn%,sc%,cs%):y%=y%MOD400
590 d%=y%*365.25+m%*30+d%+VALMID$("120112234455",m%,1)+((y%MOD4)=0)-((y%-1)DIV100)-(m%>2AND((y%MOD4)=0AND(y%MOD100)<>0ORy%=0))+36493
600 IFd%>146066:d%=d%-146097
610 d%=d%*&41EB:mem%!1=d%+d%:d%=((hr%*60+mn%)*60+sc%)*100+cs%
620 ?mem%=d%:mem%!1=mem%!1+d%DIV256:ENDPROC
630 :
640 :
650
660
670
680
690
700
710 :
720 DEFPROCDate_ToOrd(mem%):LOCAL A%,B%,C%,D%
730 year%=0:month%=0:day%=0:hour%=0:minute%=0:second%=0:centi%=0
740 IFmem%!1<0:ENDPROC:
750 D%=mem%!1DIV&83D6+2447065:C%=mem%?0+256*(mem%!1MOD&83D6):centi%=C%MOD100
760 C%=C%DIV100:second%=C%MOD60:C%=C%DIV60:minute%=C%MOD60:hour%=C%DIV60
770 B%=((D%*4+3)MOD146097AND-4)+3:C%=B%MOD1461DIV4*5+2:D%=D%*4+3
780 A%=C%DIV153+2:day%=C%MOD153DIV5+1:month%=A%MOD12+1
790 year%=D%DIV146097*100+B%DIV1461+A%DIV12-4800
800 ENDPROC
810 :
820 :
830
840
850
860
870
880
890 :
900 DEFFNDate_Since(td%,tm%,ty%,pd%,pm%,py%):LOCAL past%
910 PROCDate_FromOrd(X%,pd%,pm%,py%,0,0,0,0):past%=X%!1
920 PROCDate_FromOrd(X%,td%,tm%,ty%,0,0,0,0):=(X%!1-past%)DIV&83D6
930 :