Here is a "datelib" example. Weekly trash pickup is delayed one day on and following a holiday in that week. The holidays are:
New Years Day* - 1 January
Memorial Day - Last Monday in May
Labor Day - First Monday in September
Thanksgiving Day - Fourth Thursday in November
Christmas Day* - 25 December
* No delay if holiday is on the weekend
Code: Select all
REM
REM FN_dow(mjd%) -> Sun=0, Mon=1, Thur=4
INSTALL @lib$+"datelib"
INPUT " Year as a four digit number = ",year1%
mday%=FN_mjd(31,5,year1%)
WHILE FN_dow(mday%)<>1
mday%=mday%-1
ENDWHILE
lday%=FN_mjd(1,9,year1%)
WHILE FN_dow(lday%)<>1
lday%=lday%+1
ENDWHILE
thksgvng%=FN_mjd(22,11,year1%)
WHILE FN_dow(thksgvng%)<>4
thksgvng%=thksgvng%+1
ENDWHILE
PRINT
PRINT " For the year "+STR$(year1%)
PRINT " Memorial Day is Monday, May "+FN_date$(mday%,"d")
PRINT " Labor Day is Monday, September "+FN_date$(lday%,"d")
PRINT " Thanksgiving is Thursday, November "+FN_date$(thksgvng%,"d")
nyear1%=FN_mjd(1,1,year1%)
xmas1%=FN_mjd(12,25,year1%)
nyear2%=FN_mjd(1,1,year1%+1)
PRINT : PRINT " No delays below if holiday is on a weekend."
PRINT " New Year "+STR$(year1%)+" falls on "+FN_date$(nyear1%,"dddd")
PRINT " Christmas "+STR$(year1%)+" falls on "+FN_date$(xmas1%,"dddd")
PRINT " New Year "+STR$(year1%+1)+" falls on "+FN_date$(nyear2%,"dddd")
END
Code: Select all
REM
REM FN_dow(mjd%) -> Sun=0, Mon=1, Thur=4
INSTALL @lib$+"datelib"
INPUT " Year as a four digit number = ",year1%
mday1%=FN_find_h(25,5,year1%,1)
lday1%=FN_find_h(1,9,year1%,1)
tkg1%=FN_find_h(22,11,year1%,4)
PRINT
PRINT " For the year "+STR$(year1%)
PRINT " Memorial Day is Monday, May "+FN_date$(mday1%,"d")
PRINT " Labor Day is Monday, September "+FN_date$(lday1%,"d")
PRINT " Thanksgiving is Thursday, November "+FN_date$(tkg1%,"d")
nyear1%=FN_mjd(1,1,year1%)
xmas1%=FN_mjd(12,25,year1%)
nyear2%=FN_mjd(1,1,year1%+1)
PRINT : PRINT " No delays below if holiday is on a weekend."
PRINT " New Year "+STR$(year1%)+" falls on "+FN_date$(nyear1%,"dddd")
PRINT " Christmas "+STR$(year1%)+" falls on "+FN_date$(xmas1%,"dddd")
PRINT " New Year "+STR$(year1%+1)+" falls on "+FN_date$(nyear2%,"dddd")
END
DEF FN_find_h(sday%,smonth%,syear%,targetdow%)
LOCAL startmjd%,dowdif%
startmjd%=FN_mjd(sday%,smonth%,syear%)
dowdif%=targetdow%-FN_dow(startmjd%)
IF dowdif% < 0 THEN dowdif%=dowdif%+7
=startmjd%+dowdif%