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
4

2 回答 2

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

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

于 2013-02-19T19:16:15.647 回答
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

请注意,您在那里设置 date = date - (n-1) 并且 n 不断增加。

于 2013-02-19T19:27:14.030 回答