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, dMonday as "Day[] = Monday"
and Weekdays as "Day[] >= Monday & Day[] <= Friday"
For hours of operation, I created attributes like
0800_to_1800_ET as "TimeInZone['EST']>= '08:30 AM' & TimeInZone['EST']<= '06:00 PM' "
(I created one attribute for each set of business hours)
I then created a business rule for each combination, for example
MF_0800_1800 as (attribute) Weekdays and (attribute) 0800_to_1800_ET
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 ALL 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.