2013-02-19 46 views
1

我想弄清楚如何動態生成一系列日期。我需要考慮假期。我有一組日期,但是對於日期數組的每個成員,我想將它與假期數組進行比較,並在必要時移動日期。如何動態生成日期,考慮假期?

任何時候都有一個假期,我想選擇假期前的日期,但我需要考慮有多個日期假期的情況(例如週四和週五的假期,或者可能是3-或4-一天假期)。

這是我的工作代碼,它目前無法做我想做的事情;任何想法我做錯了什麼?

dates = [array of dates] 
holidays = [array of holidays] 

dates.each do |date| 
    adjust_for_holidays(date) 
end 

def adjust_for_holidays 
    n = 0  
    while holidays.include? date 
    n += 1 
    date = date - (n-1) 
    end 
date 
+0

嘿,你有沒有想過這個? – rainkinz 2013-03-01 17:36:55

+0

是的。事實證明,我發佈的代碼的作品。原始代碼沒有錯,但是我的實現有一個缺陷。不過,我喜歡你的方法。 – 2013-03-02 17:10:50

回答

1

我想這是你想要什麼:

require 'date' 

dates = [] 
(1..28).each do |i| 
    dates << Date.new(2012, 02, i) 
end 

@holidays = [Date.new(2012, 02, 17), Date.new(2012, 02, 18)] 
puts "HOLIDAYS: " + @holidays.inspect 

def adjust_for_holidays(date) 
    while @holidays.include? date 
    date = date - 1 
    end 
date 
end 

d = dates.collect do |date| 
    adjust_for_holidays(date) 
end 

注意你設置日期=日期 - (N-1)和正不斷增加。

1

首先你的方法沒有正確數量的參數。日期也必須是一個實例變量。我會建議假期散列,其中關鍵是日期,值是該假期的天數。例如對於總統日和勞動節

{'2/18' => 1, 
'9/2' => 1 
} 

如果它包括日期,那麼你會去任何值。像這樣的東西

def adjust_for_holidays(dates) 
    holidays.each do |date, value| 
    @date += value if @date.include?(date) 
    end 
end 

類似的東西。不知道如何將特定天數添加到字符串日期。生病讓你弄清楚:)。