DATE CALCULATIONS

 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)
Outer Court
Echo Basic Postings

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