如何动态生成日期,考虑到假期?

时间:2013-02-19 18:21:18

标签: ruby

我正在试图弄清楚如何动态生成一系列日期。我需要考虑假期。我有一个日期数组,但对于日期数组的每个成员,我想将它与一系列假期进行比较,并在必要时移动日期。

任何时候有假期,我都想在假期之前选择日期,但我需要考虑有多日期假期的情况(例如星期四和星期五假期,或者可能是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

2 个答案:

答案 0 :(得分: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
这样的事情。不知道你怎么会在字符串日期中添加特定天数。生病让你弄清楚:)。

答案 1 :(得分: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)并且n不断增加。