2016-03-13 6 views
0

Здесь я пытаюсь пропустить предопределенные праздники в массиве, но цикл в бесконечном.Ruby пропуская выходные и праздничные дни

@holidays = [DateTime.new(2016,03,15), DateTime.new(2016,03,17)] 

def skip_holidays(date) 
    date += 1 
    while @holidays.map{ |holiday| holiday == date} do 
     date = date.next_day.change(hour: 9) 
    end 
    date 
end 

skip_holidays(DateTime.new(2016,3,14)) 

Однако этот цикл здесь работает отлично

def skip_weekends(date) 
    date += 1 
    while (date.saturday?) || (date.sunday?) do 
    date = date.next_day.change(hour: 9) 
    end 
    date 
end 

skip_weekends(DateTime.new(2016,3,14)) 

Как это и как идти вокруг него?

+1

Выход @ holiday.map массив. [false, true] считается истинным. Даже [fasle, false] будет оцениваться как истинное условие. Попробуйте использовать @ holidays.include? вместо. – Syl

ответ

1

Попробуйте это:

@holidays = [DateTime.new(2016,03,15), DateTime.new(2016,03,17)] 
def skip_holidays(date) 
    if @holidays.include?(date) 
     date = date.next_day.change(hour: 9) 
    else 
     date += 1 
    end 
end 
skip_holidays(DateTime.new(2016,3,14)) 
+0

Отлично! Однако цикл не будет работать, если вы измените дату второго отпуска с 17 до 16! Какие-либо предложения? – fardin

+0

Я бы сделал простой, если и еще не запустил внешний вид здесь. Это не нужно. –

+0

Вы бы попробовали код выше? –

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