25 Years of Programming
An open source source for C, C++, OWL, BASIC, MDB, XLS, DOT, and more...
Home   Projects   Up   Sitemap   Search   Blog   Forum+Chat   About Us   Privacy   Terms of Use   Feedback   FAQ   Images   Services   Payments   Humor   Music

Calculate number of days between dates, Microsoft MBASIC program

The NUMDAYS.BAS program written for the Heathkit H-89 computer in Microsoft MBASIC calculates the number of days between two dates.

It is useful for financial calculations such as those involving interest payments or accruals, and in calculations to determine fair stock, bond, or stock option prices. The data are also used sometimes when attempting to predict likely future prices for those financial instruments.

On the H-89, each year takes about 13 seconds to calculate.

NUMDAYS.BAS

10 REM PROGRAM 'NUMDAYS.BAS'
20 REM COPYRIGHT (C)1982, 2001 STEVEN WHITNEY.  
21 REM Initially published by http://25yearsofprogramming.com.
22 REM Published under GNU GPL (General Public License) Version 3, with ABSOLUTELY NO WARRANTY.
30 DATA 31,28,31,30,31,30,31,31,30,31,30,31
40 DEFINT A-S, U-Z: DEFDBL T
45 CLS
50 PRINT STRING$(75, "="): PRINT , "*** NUMBER OF DAYS BETWEEN TWO DATES ***": PRINT
60 PRINT , "PLEASE SEPARATE DATE COMPONENTS BY COMMAS :"
70 PRINT , SPC(3); "JANUARY 10, 1982 ==>  1,10,1982"
80 PRINT STRING$(75, "-"): PRINT
90 PRINT , , "ENTER START DATE 0,0,0, TO STOP PROGRAM"
100 PRINT
110 N = 0
120 INPUT "STARTING DATE (MONTH,DAY,YEAR): "; B, C, A
130 IF B = 0 AND C = 0 AND A = 0 THEN END
140 IF B < 1 OR B > 12 OR C < 1 OR (B = 2 AND C > 29) OR ((B = 4 OR B = 6 OR B = 9 OR B = 11) AND C > 30) OR C > 31 THEN PRINT , "IMPOSSIBLE": GOTO 120
150 IF (A / 100 = INT(A / 100) AND A / 400 = INT(A / 400) AND B = 2 AND C > 29) OR (A / 100 = INT(A / 100) AND A / 400 <> INT(A / 400) AND B = 2 AND C > 28) THEN PRINT , "IMPOSSIBLE": GOTO 120
160 INPUT "  ENDING DATE (MONTH,DAY,YEAR): "; F, G, E
170 IF F < 1 OR F > 12 OR G < 1 OR (F = 2 AND G > 29) OR ((F = 4 OR F = 6 OR F = 9 OR F = 11) AND G > 30) OR G > 31 THEN PRINT , "IMPOSSIBLE": GOTO 160
180 IF (E / 100 = INT(E / 100) AND E / 400 = INT(E / 400) AND F = 2 AND G > 29) OR (E / 100 = INT(E / 100) AND E / 400 <> INT(E / 400) AND F = 2 AND G > 28) THEN PRINT , "IMPOSSIBLE": GOTO 160
190 B$ = STR$(B): IF LEN(B$) < 3 THEN B$ = "0" + RIGHT$(B$, 1)
200 C$ = STR$(C): IF LEN(C$) < 3 THEN C$ = "0" + RIGHT$(C$, 1)
210 F$ = STR$(F): IF LEN(F$) < 3 THEN F$ = "0" + RIGHT$(F$, 1)
220 G$ = STR$(G): IF LEN(G$) < 3 THEN G$ = "0" + RIGHT$(G$, 1)
230 T1 = VAL(STR$(A) + B$ + C$): REM START DATE
240 T2 = VAL(STR$(E) + F$ + G$): REM END DATE
250 IF T2 < T1 THEN PRINT : PRINT "END DATE IS PRIOR TO START DATE - START FROM BEGINNING": PRINT STRING$(75, "="): GOTO 90
260 GOTO 330
270 C = C + 1
280 N = N + 1
290 IF C > D THEN B = B + 1: C = 1: K = 1
300 IF B > 12 THEN A = A + 1: B = 1: D = 31: K = 0
310 IF A = E AND B = F AND C = G THEN 380
320 IF K = 0 THEN 370
330 RESTORE
340 FOR I = 1 TO B: READ D: NEXT I
350 IF A / 4 = INT(A / 4) AND B = 2 THEN D = 29: IF A / 100 = INT(A / 100) THEN D = 28: IF A / 400 = INT(A / 400) THEN D = 29
360 K = 0
370 GOTO 270
380 PRINT : PRINT , "DIFFERENCE IS", N; "DAYS.": GOTO 80
390 REM COPYRIGHT (C)1982 STEVEN WHITNEY.  

 

Valid HTML 4.01 Transitional Valid CSS
Yahoo! Search
Search the web Search this site
View content labeling at ICRA.