获取特定工作日的最近日期

时间:2013-06-26 19:06:23

标签: ruby-on-rails ruby ruby-on-rails-3 date time

我有约会,我想找到最接近的星期四。虽然我希望它能在任何工作日工作,而不仅仅是星期四。

为了避免混淆,我不希望下周四,我想要前一个或下个星期四,以最接近的为准。所以它必须是双向的。

我已经编写了一个代码,但是我对while循环显然不满意,我想知道你们是否有更好的实现方法。

def closest_date(date, wday)

  # already ok
  return date if date.wday == wday

  before_date = date
  after_date = date

  until before_date.wday == wday && after_date.wday == wday
    before_date -= 1.day unless before_date.wday == wday
    after_date += 1.day unless after_date.wday == wday
  end

  if (date - before_date).to_i > (after_date - date).to_i
    return after_date
  else
    return before_date
  end

end

2 个答案:

答案 0 :(得分:3)

这就是我要做的事情:

def closest_day(weekday_name,date=Date.today)
  distance = Date.parse(weekday_name).cwday - date.cwday
  (date + (distance.abs < 4 ? distance : 7 - distance.abs).days)
end

weekday_name的位置,例如“thursday”。

答案 1 :(得分:1)

def closest_date(date, wday)
  distance = wday - date.wday
  date + distance.days
end