有多个时间段中的Rails
问题描述:
预约制度工作:很多客房具有在特定的一天预订,我需要建立一个暗示3 30分钟的空闲时间跨越这些房间的任何用户代码。有多个时间段中的Rails
每个booking
有一个start_time
和end_time
。
因此,在这一天的上午8点到下午6点之间,我需要收集所有bookings
,隔离这些预订范围之间的时间,然后随机选择其中三个空闲时间。喜欢的东西...
@bookings = Booking.where("room_id IN (?)", @rooms.collect(&:id))
@busy_times = @bookings.collect{|b| b.start_time..b.end_time}
@empty_times = (@day.end_time - @day.start_time) - @busy_times # so to speak
在一般情况下,我可以做必要的这类问题的编码,但我真的不知道如何与多个时间段有效地工作。
答
我不知道是否有任何存在的库方法可以做到这一点。如果我实现该功能,我可能会按照以下步骤进行操作。
拿到书后,将开始和结束时间转换为纪元时间戳。
按开始时间对预约时间范围进行排序,将每个开始和结束时间戳放入排序序列中的数组中。阵列的每个元素是[时间戳,标记]。该标志可以是:开始或:结束。
遍历数组。使用计数器,例如计数。如果遇到一个标志是:start,count ++,如果标志是:end,则count--。然后,如果在结束标志之后计数== 0,直到下一个:开始,则该时隙是空闲的。如果时隙> 30×60,则将时隙放入数组中,例如, free_time_slot_array。
另外,从上午08点到第一预订的开始时间和最后一次登记结束时间检查的时间至下午6时,放至free_time_slot_array如果间隔> 60 * 30
从free_time_slot_array挑选三个时隙随机并转换回日期时间。
希望它可以为你工作。