生成自定义日期范围

时间:2015-12-02 14:46:45

标签: ruby ruby-on-rails-4

如何生成日期范围,拒绝某些日期,例如星期日或某些假期,并在下一个可用日期延长范围?显然我可以做(Date.today..Date.today+5.days).reject{|day| day.sunday?}之类的事情,但是这会删除星期日并使我的范围更小。我怎么解决这个问题?我应该实现自定义Range类吗?

2 个答案:

答案 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]