Simple datelib example

Here you can link to screenshots and demos etc. of programs made using BBC BASIC
jinx100
Posts: 4
Joined: Mon 28 Apr 2025, 13:56

Simple datelib example

Post by jinx100 »

BBC Basic can do complex programs but it is great for simple, helpful tasks too.

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
Edit - A slight variation:

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%
Last edited by jinx100 on Mon 08 Sep 2025, 19:01, edited 1 time in total.
Richard Russell
Posts: 457
Joined: Tue 18 Jun 2024, 09:32

Re: Simple datelib example

Post by Richard Russell »

jinx100 wrote: Fri 05 Sep 2025, 01:19 Here is a "datelib" example. Weekly trash pickup is delayed one day on and following a holiday in that week. The holidays are:
Seems to work well, thanks.