Вы можете взглянуть на мой Рабочий шаблон драгоценный камень. Позволяет указать время работы и отдыха. Он был нацелен на создание подобного «Календаря», используемого в инструментах планирования, таких как Microsoft Project и Primavera P6, так что вы можете указать его с точностью до минуты.
Вот простой пример:
Создайте новый Workpattern mywp=Workpattern.new('My Workpattern',2011,10)
Это на 10 лет с 2011 года, но вы можете сделать его длиннее или короче.
Скажите, что вы хотите, чтобы в выходные дни отдыхали и что вы также хотите отдыхать в течение недели, чтобы вы работали с 9 до 12 часов утра и с 1 до 6 часов дня.
mywp.resting(:days => :weekend)
mywp.resting(:days =>:weekday, :from_time=>Workpattern.clock(0,0),:to_time=>Workpattern.clock(8,59))
mywp.resting(:days =>:weekday, :from_time=>Workpattern.clock(12,0),:to_time=>Workpattern.clock(12,59))
mywp.resting(:days =>:weekday, :from_time=>Workpattern.clock(18,0),:to_time=>Workpattern.clock(23,59))
Теперь просто посчитайте, используя минуты
mydate=DateTime.civil(2011,9,1,9,0)
result_date = mywp.calc(mydate,1920) # => 6/9/11@18:00
1920 - это 4 дня * 8 часов в день * 60 минут и час.
Я написал камень, чтобы выучить Ruby - только поцарапал поверхность.