【问题标题】:Ruby skipping weekends and holidaysRuby 跳过周末和节假日
【发布时间】:2016-03-13 13:11:12
【问题描述】:

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

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

这是怎么回事以及如何绕过它?

【问题讨论】:

  • @holiday.map 输出一个数组。 [false,true] 被认为是真的。甚至 [fasle,false] 也会被评估为真条件。尝试使用@holidays.include?而是。

标签: ruby loops datetime activesupport


【解决方案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))

【讨论】:

  • 完美!但是,如果将第二个假期的日期从 17 更改为 16,则循环将不起作用!有什么建议吗?
  • 我会做简单的 if and else not run the look here。不需要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
相关资源
最近更新 更多