Older Version
Newer Version
harmonv
May 27, 2007
- "Added Zeller's congruence and LBmod function, note for LB3.x users. Many minor edits too."
Liberty Basic Day and Date Routines
LB day-of-week conversion This routine uses LB's built-in date$() function. 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.
- -- -
harmonv
Liberty BASIC Day of Week
This routine uses LB's built-in Date$() function.' Returnday-of-week for d$function dayofweek$(dt$)Day-of-Week for dt$
function DayofWeek$(dt$)
day = date$(dt$) mod 7 + 7 ' +7 for dates before Jan 1, 1901
select case (day mod 7)
case 0: d$ = "Tuesday"
case 1: d$ = "Wednesday"
case 2: d$ = "Thursday"
case 3: d$ = "Friday"
case 4: d$ = "Saturday"
case 5: d$ = "Sunday"
case 6: d$ = "Monday"
end select
dayofweek$DayofWeek$ = d$
end 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.' Day of Week using Zeller's Congruence
Function ZellerDoW$(yr, mo, dy)
m = mo - 2
if m<1 then
m = m + 12
yr = yr - 1
end if
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)
end function
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)) mod 7
end function
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)-32045
end function
Julian Day to Gregorian Year, Month, Day
' Julian day to Gregorian date
function 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)
end function
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.'Gregorian date to day-of-week (0=Sun, 1=Mon, ...)function G2dow(yr,mo,dy)LB mod function for LB 3.x users
function LBmod(a, b)
LBmod = a= int((14-mo)/12)m = mo + 12*a - 2y = yr - aG2dow = (dy + y + int(y/4)-int(y/100)+int(y/400)+int(31*m/12)) mod- b * int(a/b)
end function
Example Usage
For the DayofWeek$() function, replace the two lines using MOD with these:
day = LBmod( date$(dt$), 7) + 7end function' +7 for dates before Jan 1, 1901
select case 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.htmlThey can be freely distributed for all