获取给定日期之后特定日期的第一次出现

时间:2017-11-27 12:03:14

标签: ruby

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的方法)。

1 个答案:

答案 0 :(得分:1)

require "date"

def get_next_day_after_day(date, day)
  date + (Date.strptime(day, "%A") - date) % 7
end