2013-02-19 30 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 

类似的东西。不知道如何将特定天数添加到字符串日期。生病让你弄清楚:)。