So, what's the deal with not having a dates table?
It will solve all your problems, no need for complex functions or anything else exotic.
The main problem: How do you define 'workday' programatically?
You can't. Simple as that.
'Workday' is a business rule, it differs from place to place, so you need to single out those 'special' days anyway. Might as well do it once, store it in a permanent table for lookups, then it's always there to be found. No need to try to calculate it everytime.
Do it once, then forget about it. 🙂
/Kenneth