如何生成日期范围,拒绝某些日期,例如星期日或某些假期,并在下一个可用日期延长范围?显然我可以做(Date.today..Date.today+5.days).reject{|day| day.sunday?}
之类的事情,但是这会删除星期日并使我的范围更小。我怎么解决这个问题?我应该实现自定义Range类吗?
答案 0 :(得分:1)
这一般是不可能的。范围必须是连续的。除非您要拒绝的日期位于原始范围的任何一端,否则这是不可能的。
但是,通过将范围转换为数组,您可以执行类似的操作:
(Date.today..Date.today+5.days).to_a.reject(&:sunday?)
答案 1 :(得分:0)
@sawa已经指出Range
无法做到这一点。
我认为你需要使用一个充满合格日期的数组:
def working_days(number)
[].tap do |days|
date = Date.today
while days.size < number
days << date unless date.sunday? || date.saturday?
date = date.next
end
end
end
working_days(5)
#=> [02 Dec 2015, 03 Dec 2015, 04 Dec 2015, 07 Dec 2015, 08 Dec 2015]