2015-12-02 137 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