This thread提供了在今天的日期之后找到第一天(例如星期四)的答案。
我希望得到一个更通用的功能,它可以在任何给定日期(例如2017年11月1日)之后首次出现一天(例如星期四)。
因此,该方法将采用2个参数:Date(作为String或作为Date对象)和日期(作为String)。
我找到的一种方法是使用thursday?
方法检查每天(例如my_date_object.thursday?
),但是你需要一个switch / if-else语句来检查要检查的日期,这使得这个方法相当笨重,如下所示。
def get_next_day_after_date(date, day)
days_in_week = 7
week = []
days_in_week.times { |day_after| week << (date + day_after) }
if day.casecmp('Monday').zero?
week.select(&:monday?)
elsif day.casecmp('Tuesday').zero?
week.select(&:tuesday?)
elsif day.casecmp('Wednesday').zero?
week.select(&:wednesday?)
# same code for Thursday to Sunday
end
end
在纯Ruby中有没有更简洁的方法来实现这一目标? (不使用active_support
或特定于rails的方法)。
答案 0 :(得分:1)
require "date"
def get_next_day_after_day(date, day)
date + (Date.strptime(day, "%A") - date) % 7
end