BBS: Inland Empire Archive Date: 06-20-92 (17:30) Number: 1042 From: DOUGLAS LUSHER Refer#: NONE To: DOUGLAS LUSHER Recvd: NO Subj: DATE CALCULATIONS Conf: (2) Quik_Bas
Here are the promised date manipulation functions:
DIM Days%(12)
Days%(1) = 0: Days%(2) = 31: Days%(3) = 59: Days%(4) = 90
Days%(5) = 120: Days%(6) = 151: Days%(7) = 181: Days%(8) = 212
Days%(9) = 243: Days%(10) = 273: Days%(11) = 304: Days%(12) = 334
FUNCTION GregDate$ (Julian&) STATIC
'returns the date of the Gregorian calendar for the supplied
'Julian day number, returns a string formated "MM-DD-YYYY"
STATIC Days&, Month%, Day%, Year%, DateString$
Days& = Julian& - 1721425
'adjust with a constant
Year% = (Days& \ 146097) * 400
Days& = Days& MOD 146097
'the value 146,097 is the number of days in four hundred years
'given by ((365 * 4 + 1) * 25 - 1) * 4 + 1
Year% = Year% + (Days& \ 36524) * 100
Days& = Days& MOD 36524
'the value 36,524 is the number of days in a century
'given by (365 * 4 + 1) * 25 - 1
Year% = Year% + (Days& \ 1461) * 4
Day% = Days& MOD 1461
'the value 1,461 is the number of days in four years, 365 * 4 + 1
IF Day% = 0 THEN
Day% = 366
ELSE
Year% = Year% + Day% \ 365
Day% = Day% MOD 365
IF Day% = 0 THEN
Day% = 365
ELSE
Year% = Year% + 1
END IF
END IF
IF LeapYear(Year%) THEN
SELECT CASE Day%
CASE IS <= 31: Month% = 1
CASE IS <= 60: Month% = 2: Day% = Day% - 31
CASE IS <= 91: Month% = 3: Day% = Day% - 60
CASE IS <= 121: Month% = 4: Day% = Day% - 91
CASE IS <= 152: Month% = 5: Day% = Day% - 121
CASE IS <= 183: Month% = 6: Day% = Day% - 152
CASE IS <= 214: Month% = 7: Day% = Day% - 182
CASE IS <= 244: Month% = 8: Day% = Day% - 213
CASE IS <= 274: Month% = 9: Day% = Day% - 244
CASE IS <= 305: Month% = 10: Day% = Day% - 274
CASE IS <= 335: Month% = 11: Day% = Day% - 305
CASE ELSE: Month% = 12: Day% = Day% - 335
END SELECT
ELSE 'IF NOT LeapYear(Year%) THEN
SELECT CASE Day%
CASE IS <= 31: Month% = 1
CASE IS <= 59: Month% = 2: Day% = Day% - 31
CASE IS <= 90: Month% = 3: Day% = Day% - 59
CASE IS <= 120: Month% = 4: Day% = Day% - 90
CASE IS <= 151: Month% = 5: Day% = Day% - 120
CASE IS <= 181: Month% = 6: Day% = Day% - 151
CASE IS <= 212: Month% = 7: Day% = Day% - 181
CASE IS <= 243: Month% = 8: Day% = Day% - 212
CASE IS <= 273: Month% = 9: Day% = Day% - 243
CASE IS <= 304: Month% = 10: Day% = Day% - 273
CASE IS <= 334: Month% = 11: Day% = Day% - 304
CASE ELSE: Month% = 12: Day% = Day% - 334
END SELECT
END IF
DateString$ = "00-00-0000"
MID$(DateString$, 1, 2) = RIGHT$(STR$(Month% + 100), 2)
MID$(DateString$, 4, 2) = RIGHT$(STR$(Day% + 100), 2)
MID$(DateString$, 6, 5) = STR$(-Year%)
GregDate$ = DateString$
END FUNCTION
FUNCTION JuliDate& (DateString$) STATIC
'returns the Julian day number for the date string supplied
'in the format "MM-DD-YYYY"
STATIC Month%, Day%, Year%, Temp&
SHARED Days%()
Month% = VAL(LEFT$(DateString$, 2))
Day% = VAL(MID$(DateString$, 4, 2))
Year% = VAL(RIGHT$(DateString$, 4)) - 1
'calculate the number of days in all preceeding years
Temp& = (Year% * 365&) + (Year% \ 4) - ((Year% \ 100) - (Year% \ 400))
'add the number of days in the year to the start of the specified month
'if it's a leap year and after February, add one more day
Temp& = Temp& + Days%(Month%) - (LeapYear%(Year% + 1) AND (Month% > 2))
'add the number of days in the specified month
'adjust with a constant
JuliDate& = Temp& + Day% + 1721425
END FUNCTION
'====== continued next message ======
--- TMail v1.29
* Origin: TC-AMS MLTBBS 2.2 - Minnetonka, MN (612)-938-4799 (1:282/7)

Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET