Example program scrubbed from a live project. Hopefully this module might work for what you need or give you some ideas on how to implement something similar.
The way the module works, each day of the week has an open and close trigger. If a holiday is defined for that day then the regular schedule for the day is ignored and the holiday schedule for that day is followed. Essentially weekdays are always repeating, and holidays are single dates; they don’t repeat yearly or anything fancy.
“holidays” are set as max 20 in the simpl+ constants, could be increased.
The module also writes to the system log on each event trigger so that you can go back and see it if there were issues (since the times were all user defined so they might mess something up but blame the code).