'=========================================================================== ' Subject: HOW MANY DAYS Date: Year of 1993 ' Author: Chris Tracy Code: QB, QBasic, PDS ' Origin: FidoNet QUIK_BAS Echo Packet: DATETIME.ABC '=========================================================================== DECLARE SUB Days (M1, D1, Y1, M2, D2, Y2, N) Days 1, 1, 85, 1, 3, 93, Number PRINT "The number of days between 1/1/85 and 1/1/93 is:"; Number SUB Days (M1, D1, Y1, M2, D2, Y2, N) ' How Many Days v1.0 - By Chris Tracy ' Credit goes to the person who originally wrote this routine in GWBASIC... ' This routine can be used to find the number of days between ANY date. ' It accounts for leap years, leap centuries, etc. ' M1/D1/Y1 - The First Date (Ie. 1/1/85) ' M2/D2/Y2 - The Last Date (Ie. 1/3/93) ' N - The Value Returned. ' See the main module of an example of how to use this routine. CheckVariables: IF M1 > 12 THEN GOTO EndTheSub: IF D1 > 31 THEN GOTO EndTheSub: MainBody: Y = Y1 M = M1 D = D1 GOSUB FindDays: N = A Y = Y2 D = D2 M = M2 GOSUB FindDays: N = A - N GOTO EndTheSub: FindDays: ON M GOTO Check1, Check2, Check1, Check3, Check1, Check3, Check1, Check1, Check3, Check1, Check3, Check1 RETURN Check1: IF D > 31 THEN GOTO FindDays: GOTO DetermineDays: Check2: IF Y / 4 <> INT(Y / 4) THEN GOTO Check4: IF Y / 400 = INT(Y / 400) THEN GOTO Check5: IF Y / 100 <> INT(Y / 100) THEN GOTO Check5: Check4: IF D > 28 THEN GOTO Returner: Check5: IF D > 29 THEN GOTO Returner: GOTO DetermineDays: Check3: IF D > 30 THEN GOTO Returner: DetermineDays: SELECT CASE M CASE 1 A = 0 CASE 2 A = 31 CASE 3 A = 59 CASE 4 A = 90 CASE 5 A = 120 CASE 6 A = 151 CASE 7 A = 181 CASE 8 A = 212 CASE 9 A = 243 CASE 10 A = 273 CASE 11 A = 304 CASE 12 A = 334 END SELECT A = A + Y * 365 + INT(Y / 4) + D + 1 - INT(Y / 100) + INT(Y / 400) IF INT(Y / 4) <> Y / 4 THEN GOTO Returner: IF Y / 400 = INT(Y / 400) THEN GOTO Returner: IF Y / 100 = INT(Y / 100) THEN GOTO Returner: IF M > 2 THEN GOTO Returner: A = A - 1 Returner: RETURN EndTheSub: END SUB