Liberty BASIC is adept at handling various date string formats. It can handle 1- or 2-digit numbers for the month and day. It will also accept fully typed month names or 3-letter abbreviations. Years can be 1, 2, 3 or 4-digit numbers. Years from 0 to 99 are assumed as 2000 to 2099.
Some examples: Jul 4, 06 -- July 04, 2006 -- 7/4/6 -- 07/04/2006
In the LB universe, day 0 was Jan 1, 1901 and dates before 1/1/1901 return negative numbers.
Be aware that negative years are incorrectly handled as positive, so LB's Date$() function can not be relied upon for any date earlier than Jan 1, 100.
' Return Day-of-Week for dt$function DayofWeek$(dt$)
day =date$(dt$)mod7+7' +7 for dates before Jan 1, 1901selectcase(day mod7)case0: d$ ="Tuesday"case1: d$ ="Wednesday"case2: d$ ="Thursday"case3: d$ ="Friday"case4: d$ ="Saturday"case5: d$ ="Sunday"case6: d$ ="Monday"endselect
DayofWeek$ = d$
endfunction
Zeller's Congruence for Day of Week
This version does not use LB's internal Date$() function, so the input parameters must be numbers. This routine might be prefered by LB 3.x users since it does not use the MOD operator.
' Day of Week using Zeller's CongruenceFunction ZellerDoW$(yr, mo, dy)
m = mo -2if m<1then
m = m +12
yr = yr -1endif
c =int(yr/100)
d = yr -100*int(yr/100)
f =int(2.6*m -0.2)+ dy + d +int(d/4)+int(c/4)+5*c
f = f -7*int(f/7)
dow$ ="Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
ZellerDoW$ = word$(dow$, f+1)endfunction
Gregorian Year, Month, Day to Day of Week
' Gregorian date to Day-of-Week #' This returns a number between 0 and 6 (0=Sun, 1=Mon, ...)function G2dow(yr,mo,dy)
a =int((14-mo)/12)
m = mo +12*a -2
y = yr - a
G2dow =(dy + y +int(y/4)-int(y/100)+int(y/400)+int(31*m/12))mod7endfunction
Gregorian Year, Month, Day to Julian Day #
' Convert Gregorian year,month,day to Julian Day #function G2Jd(yr,mo,dy)
a =int((14-mo)/12)
y = yr +4800- a
m = mo +12*a -3
G2Jd = dy +int((153*m+2)/5)+365*y+int(y/4)-int(y/100)+int(y/400)-32045endfunction
Julian Day to Gregorian Year, Month, Day
' Julian day to Gregorian datefunction Jd2G(jd, byref yr, byref mo, byref dy)
a = jd +32044
b =int((4*a+3)/146097)
c = a -int((146097*b)/4)
d =int((4*c+3)/1461)
e = c -int(1461*d/4)
m =int((5*e+2)/153)
dy = e -int((153*m+2)/5)+1
mo = m +3-12*int(m/10)
yr =100*b + d -4800+int(m/10)endfunction
Note for LB 3.x users
LB 3.x does not have the MOD operator, so you will need to provide one for some of these functions.
' LB mod function for LB 3.x usersfunction LBmod(a, b)
LBmod = a - b *int(a/b)endfunction
Example Usage
For the DayofWeek$() function, replace the two lines using MOD with these:
day = LBmod(date$(dt$), 7)+7' +7 for dates before Jan 1, 1901selectcase LBmod(day, 7)
Additional Information
The calculations for the Gregorian date and day routines are from Claus Tøndering's excellent Calendar FAQ page at http://www.tondering.dk/claus/calendar.html
They can be freely distributed for all non-commercial uses.
Liberty Basic Day and Date Routines
LB Day-of-Week Conversions
Liberty BASIC is adept at handling various date string formats. It can handle 1- or 2-digit numbers for the month and day. It will also accept fully typed month names or 3-letter abbreviations. Years can be 1, 2, 3 or 4-digit numbers. Years from 0 to 99 are assumed as 2000 to 2099.
Some examples: Jul 4, 06 -- July 04, 2006 -- 7/4/6 -- 07/04/2006
In the LB universe, day 0 was Jan 1, 1901 and dates before 1/1/1901 return negative numbers.
Be aware that negative years are incorrectly handled as positive, so LB's Date$() function can not be relied upon for any date earlier than Jan 1, 100.
Liberty BASIC Day of Week
This routine uses LB's built-in Date$() function.Zeller's Congruence for Day of Week
This version does not use LB's internal Date$() function, so the input parameters must be numbers. This routine might be prefered by LB 3.x users since it does not use the MOD operator.Gregorian Year, Month, Day to Day of Week
Gregorian Year, Month, Day to Julian Day #
Julian Day to Gregorian Year, Month, Day
Note for LB 3.x users
LB 3.x does not have the MOD operator, so you will need to provide one for some of these functions.Example Usage
For the DayofWeek$() function, replace the two lines using MOD with these:
Additional Information
The calculations for the Gregorian date and day routines are from Claus Tøndering's excellent Calendar FAQ page at http://www.tondering.dk/claus/calendar.htmlThey can be freely distributed for all non-commercial uses.