My solution is not as dynamic as you might be looking for, but...
I created two sets of attributes in IRD - one for Hours of Operation and one for Business Days.
In Business Days, I created each of my days (which I called dMonday through dSunday, because the word names are reserved word constants in IRD) as "Day[] = (day of week)". For example, [b]dMonday[/b] as "[b]Day[] = Monday[/b]"
and [b]Weekdays[/b] as "[b]Day[] >= Monday & Day[] <= Friday[/b]"
For hours of operation, I created attributes like
[b]0800_to_1800_ET[/b] as "[b]TimeInZone['EST']>= '08:30 AM' & TimeInZone['EST']<= '06:00 PM' [/b] "
(I created one attribute for each set of business hours)
I then created a business rule for each combination, for example
[b]MF_0800_1800 [/b] as (attribute) [b]Weekdays[/b] and (attribute) [b]0800_to_1800_ET[/b]
In my team routing definitions, I refer to the same value as the Business Rule, and evaluate it in a chain of Segmentation objects (up to 5 evaluations per chain, to make it managable). When I hit my desired value, I go to a BusinessRule Object which is set for the appropriate Workday + Hours combination.
I stuffed [b]ALL[/b] this into a subroutine. The input parameter is the desired value (MF_0800_1800), and the output is a value to indicate whether that team is closed or not.
If I could find a function to call a business rule, it would make this a LOT cleaner, but it's been in place for 5+ years.