This is my date routine, you can also use it to find out how many days have elapsed between two dates (DE).
Any improvements ?
10:
DATA JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER
11:
DATA MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
12:
DATA 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
DAYF:
RESTORE 12
FOR A = 1 to 12
READ MD(A)
NEXT A
DD = val(left$(DT$, 2)) : MM = val(mid$(DT$, 4, 2)) : YY = val(right$(DT$, 4))
IF YY < 1992 THEN INVDAY
IF MM < 1 or MM > 12 THEN INVDAY
MD(2) = MD(2) - (YY / 4 = int(YY / 4))
IF DD < 1 or DD > MD(MM) - (YY / 4 = int(YY / 4)) THEN INVDAY
DE = 0
FOR Y = 1988 to YY -1
DE = DE +365 - (Y / 4 = int(Y / 4))
NEXT Y
IF MM <> 1 THEN
FOR M = 1 to MM -1
DE = DE + MD(M)
NEXT M
END IF
DE = DE + DD -1 : C = DE / 7 : D = C - int(C) : E = cint(D * 7)
E = E +5 +7 * (E +5 > 7)
RESTORE 11
FOR A = 1 to E
READ DAY$
NEXT A
RETURN
INVDAY:
DAY$ = "*" : ' INVALID DATE
RETURN
Any improvements ?
10:
DATA JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER
11:
DATA MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
12:
DATA 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
DAYF:
RESTORE 12
FOR A = 1 to 12
READ MD(A)
NEXT A
DD = val(left$(DT$, 2)) : MM = val(mid$(DT$, 4, 2)) : YY = val(right$(DT$, 4))
IF YY < 1992 THEN INVDAY
IF MM < 1 or MM > 12 THEN INVDAY
MD(2) = MD(2) - (YY / 4 = int(YY / 4))
IF DD < 1 or DD > MD(MM) - (YY / 4 = int(YY / 4)) THEN INVDAY
DE = 0
FOR Y = 1988 to YY -1
DE = DE +365 - (Y / 4 = int(Y / 4))
NEXT Y
IF MM <> 1 THEN
FOR M = 1 to MM -1
DE = DE + MD(M)
NEXT M
END IF
DE = DE + DD -1 : C = DE / 7 : D = C - int(C) : E = cint(D * 7)
E = E +5 +7 * (E +5 > 7)
RESTORE 11
FOR A = 1 to E
READ DAY$
NEXT A
RETURN
INVDAY:
DAY$ = "*" : ' INVALID DATE
RETURN