7 Date Conversion
! This function converts a date string of the form mm/dd/yy, m/dd/yy, ! mm/d/yy, or m/d/yy to an integer value. The date must be from ! 1/1/72 to 12/31/99 inclusive. The integer value returned will be ! in the range 1 to 10227. If an invalid date string is input, ! the return integer value will be 0. ! ! variables: ! D - the day value ! Dt$ - the date string ! Dval - the numeric value of the date ! I - a loop index ! M - the month value ! Y - the year value ! DEF FNDate(Dt$) INTEGER D,Dval,I,M,Y ! ! Check for proper date string length. IF (LEN(Dt$)<=8) AND (LEN(Dt$)=6) THEN Cont1 Dval=0 GOTO End ! ! Insert leading zeros in month and day, if necessary, ! to get mm/dd/yy. Cont1: IF LEN(Dt$)=6 THEN Dt$="O"&Dt$ IF (LEN(Dt$)=7) AND (Dt$[2,2]="/") THEN Dt$="O"&Dt$ IF LEN(Dt$)=7 THEN Dt$=Dt$[1,3]&"O"&Dt$[4] ! ! Check for slashes between month, day and year. IF (Dt$[3,3]="/") AND (Dt$[6,6]="/") THEN Cont2 Dval=0 GOTO End ! ! Check for only digits In month,day and year. Cont2: FOR I=1 TO 8 IF (I=3) OR (I=6) THEN Cont3 IF POS("1234567890",Dt$[I,I])>0 THEN Cont3 Dval=0 GOTO End ! Cont3: NEXT I ! ! Convert month, ciay and year to numeric. M=VAL(Dt$[1,2]) D=VAL(Dt$[4,5]) Y=VAL(Dt$[7,8])+1900 ! ! Compute the numeric value of the date. Dval=INT(365.2500*(Y-1972)+0.75)+INT(30.550*M-29.950) -2*(M>2)+D+((M>2) AND (Y/4=INT(Y/4))) ! ! Convert the numeric value of the date back to a string ! to check for valid date. Cont4: IF Dt$<>FNDate$(Dval) THEN Dval=0 End: RETURN Dva1 FNEND ! ! ! This function converts a date integer vlaue in the range 1 to 10227 ! to a date string of the form mm/dd/yy. If an invalid date integer ! value is input, the date string will be set to null. ! ! variables: ! D - the day value ! Dt$ - the date string ! Dval - the numeric value of the date ! M - the month value ! N - an intermediate value ! Y - the year value ! DEF FNDate$(INTEGER Dval) INTEGER D,M,N,Y DIM Dt$[8] ! ! Check the numeric value for valid range. IF (Dval>0) AND (Dval<10228) THEN Cont1 Dt$=" " GOTO End ! ! Convert numeric value of the date to month, day and year. Cont1: Y=INT((Dval-L)/365.2500)+1972 N=Dval-INT(365.2500-(Y-1972)+0.75) M=INT((N+31)/30) IF INT(30.550*M-29.950)-2*(M>2) AND ((Y/4=INT(Y/4))>N) THEN M=M-1 D=N-INT(30.550*M-29.950)+2*(M>2)-((M>2) AND (Y/4=INT(Y/4))) ! ! Assemble the date string. ! Dt$=VAL$(M)&"/"&VAL$(D)&"/"&VAL$(Y-1900) ! ! Insert leading zeros in ..nth and day, if "ecessary, ! to get mm/dd/yy. IF LEN(Dt$)=6 THEN Dt$="0"&Dt$ IF (LEN(Dt$)=7) AND (Dt$[2,2]="/") THEN Dt$="0"&Dt$ IF LEN(Dt$)=7 THEN Dt$=Dt$[1,3]&"0"&Dt$[4] RETURN Dt$ FNEND