2013-02-19 3 views
1

Я пытаюсь выяснить, как генерировать ряд дат динамически. Мне нужно учитывать праздники. У меня есть массив дат, но для каждого члена массива date я хочу сравнить его с массивом праздников и перенести дату, когда это необходимо.Как я могу динамически генерировать даты, принимая во внимание праздники?

В любое время есть праздник, я хочу выбрать дату до этого праздника, но мне нужно учитывать ситуации, когда есть многодневные праздники (например, праздник в четверг и пятницу или, возможно, 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

+0

Да. Оказывается, код, который я написал, работает. В исходном коде не было ничего плохого, но у моей реализации был недостаток. Мне нравится ваш подход. –

ответ

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 

Обратите внимание, что вы настройки даты = дата - (п-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 

что-то в этом роде. не уверен, что вы собираетесь добавить определенное количество дней в строчную дату. больно дайте понять это :).

Смежные вопросы