2015-12-02 131 views
0

如何生成日期范围,拒绝某些日子,例如星期日或某些节假日,并在下一个可用日期后延长范围?很明显,我可以做类似(Date.today..Date.today+5.days).reject{|day| day.sunday?}的东西,但是这会消除星期日,并缩小我的范围。我该如何解决这个问题?我应该实现一个自定义的Range类吗?生成自定义日期范围

回答

0

这不能用Range完成为@sawa已经指出。

我认为你需要使用充满合格天的数组:

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] 
1

这是不可能的一般。范围必须是连续的。除非您想要拒绝的日期在原始范围的任何一端,否则这是不可能的。

然而,通过一系列转换到一个数组,你可以做类似的事情:

(Date.today..Date.today+5.days).to_a.reject(&:sunday?) 
+0

所以我想我应该做的完全不同的东西。 :-) – Dennis