I built schedulejs (http://bunkat.github.io/schedule/) when I needed to solve this problem for my own services. It lets you define very complete schedules (working hours, vacations, dependencies, breaks, etc) and then generate conforming schedules. It's a library and not a stand-alone tool, but it wouldn't be hard to build something on top of it.
That looks great -- and if you're ever looking to to some JS work in SF, shoot me an email: dave@pagerduty.com.
With scheduling, the hardest part seems to be the UI. It's the MS Word problem, everybody wants a simpler UI, but everyone uses has one complicated task and it's a different task.
Totally agree and that's why I open sourced the scheduler library and not a UI for it :) Schedule UIs should always be created specific to their usage domain otherwise they get out of control pretty quickly. Love PagerDuty by the way, but I'm not even a developer so I'm pretty sure you wouldn't want me mucking around in your code base.