'=========================================================================== ' Subject: CALCULATES DAY OF THE WEEK Date: Unknown Date ' Author: Garry Spencer Code: QB, QBasic, PDS ' Origin: gspencer@stim.tec.tn.us Packet: DATETIME.ABC '=========================================================================== 'WEEKDAY.BAS - Function to calculate the day of the week when given the ' date in integer form: Mon%, Day%, Year% (year: 1582 to 2450) ' Note: Returns (0=Sunday...6=Saturday) or -1 if an error occurs ' Written by: Garry Spencer (gspencer@stim.tec.tn.us) 'To compile & link (stand-alone OBJ): BC WEEKDAY; 'To add the WEEKDAY function to a library: LIB libname +WEEKDAY; 'To compile a user program: BC progname/O; 'and add the WEEKDAY function to it: LINK/EX progname WEEKDAY; 'To Use: DECLARE FUNCTION WEEKDAY% (Mon%, Day%, Year%) 'do not use BYVAL 'Example: CLS PRINT : LOCATE 12, 12 INPUT ; "Enter date (mm,dd,yyyy): ", Mon%, Day%, Year% DWeek% = WEEKDAY%(Mon%, Day%, Year%) PRINT " is a "; SELECT CASE DWeek% CASE 0 PRINT "Sunday." CASE 1 PRINT "Monday." CASE 2 PRINT "Tuesday." CASE 3 PRINT "Wednesday." CASE 4 PRINT "Thursday." CASE 5 PRINT "Friday." CASE 6 PRINT "Saturday." CASE ELSE PRINT "Error" END SELECT FUNCTION WEEKDAY% (Mon%, Day%, Year%) DTmp% = 4: Days% = 0: Ofs% = 0: Leap% = 0: WEEKDAY% = -1 IF Year% < 1582 OR Year% > 2450 OR Mon% < 1 OR Mon% > 12 OR Day% < 1 THEN EXIT FUNCTION FOR YTmp% = 1582 TO Year% DTmp% = (DTmp% + 1 + Leap%) MOD 7 SELECT CASE 0 CASE (YTmp% MOD 400) Leap% = 1 CASE (YTmp% MOD 100) Leap% = 0 CASE (YTmp% MOD 4) Leap% = 1 CASE ELSE Leap% = 0 END SELECT NEXT YTmp% FOR MTmp% = 1 TO Mon%: Ofs% = Ofs% + Days% SELECT CASE MTmp% CASE 1 Days% = 31: CASE 2 Days% = 28 + Leap%: CASE 3 Days% = 31 CASE 4 Days% = 30: CASE 5 Days% = 31: CASE 6 Days% = 30 CASE 7 Days% = 31: CASE 8 Days% = 31: CASE 9 Days% = 30 CASE 10 Days% = 31 CASE 11 Days% = 30: CASE 12 Days% = 31 END SELECT NEXT MTmp% IF Day% <= Days% THEN WEEKDAY% = (DTmp% + Ofs% + Day% - 1) MOD 7 END FUNCTION