我有约会,我想找到最接近的星期四。虽然我希望它能在任何工作日工作,而不仅仅是星期四。
为了避免混淆,我不希望下周四,我想要前一个或下个星期四,以最接近的为准。所以它必须是双向的。
我已经编写了一个代码,但是我对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
答案 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