我正在试图弄清楚如何动态生成一系列日期。我需要考虑假期。我有一个日期数组,但对于日期数组的每个成员,我想将它与一系列假期进行比较,并在必要时移动日期。
任何时候有假期,我都想在假期之前选择日期,但我需要考虑有多日期假期的情况(例如星期四和星期五假期,或者可能是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 :(得分: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不断增加。