2016-03-13 3 views
0

Ici, je suis en train d'ignorer les vacances prédéfinies dans un tableau, mais la boucle en infini.Ruby skipping week-ends et jours fériés

@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)) 

Cependant, cette boucle fonctionne ici parfaitement

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)) 

Comment est-ce et comment le contourner?

+1

La sortie @ de holiday.map un tableau. [false, true] est considéré comme vrai. Même [fasle, false] sera évalué comme une véritable condition. Essayez d'utiliser @ holidays.include? au lieu. – Syl

Répondre

1

Essayez celui-ci:

@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

Parfait! Cependant, la boucle ne fonctionnera pas si vous changez la date de la deuxième fête de 17 à 16! Aucune suggestion? – fardin

+0

Je ferais simple si et ne pas courir le regard ici. Ce n'est pas besoin. –

+0

pourriez-vous essayer le code ci-dessus? –