Ruby跳过周末和假期

时间:2016-03-13 13:11:12

标签: ruby loops datetime activesupport

这里我试图在数组中跳过预定义的假期,但循环是无限的。

@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 个答案:

答案 0 :(得分: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))