
7 Date Conversion
! This function converts a date string of the form dd/mm/yy, d/mm/yy
! dd/m/yy, or d/m/yy to an integer value. The date must be
! from 1/1/72 to 31/12/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 k>e 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 Contl
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$="0"&Dt$
IF LEN(Dt$)=7 THEN Dt$=Dt$[1,3]&"0"&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, day 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 eck for
! valid date.
Cont4: IF Dt$<>FNDate$(Dval) THEN Dval=0
End: RETURN Dval
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 Contl
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-L
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$(D)&"/"&VAL$(M)&"/"&VAL$(Y-1900)
!
! Insert leading zeros in month and day, if necessary, to
! get mm/dd/yy.
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]
End: RETURN Dt$
FNEND