0
This threadは、今日の日付の後の最初の出現(たとえば、木曜日)を見つける答えを提供します。指定された日付の後の特定の日の最初の出現を取得します。
任意の日付(たとえば、2017年11月1日)の後に最初の日(例:木曜日)が表示される、より一般的な関数を取得したいと考えています。
したがって、このメソッドでは、Date(StringまたはDateオブジェクト)とDate(String)の2つの引数をとります。
私が見つけた1つの方法は、メソッド(例: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
の使用やレール固有の方法は使用しない)。
ありがとうございました。これを使用しようとする人は、メソッドが 'DateTime'オブジェクトとは異なる振る舞いをするので、この関数の動作は' Date'オブジェクトと一緒に使うべきであることに注意してください。たとえば、 'Friday 24 November 2017 00:00'を表す' DateTime'オブジェクトでこれを呼び出すと、'2011年11月24日 'を表す日付オブジェクトが返されますが、 'DateTime'オブジェクトの同じメソッドを' 2017年11月24日15:00'は '2017年12月1日 'に設定された日付オブジェクトを返します。 – Pauline
'DateTime'オブジェクトで安全に使うために、メソッドは次のように編集できます:' date +(Date.strptime(day、 '%A') - date.to_date)%7' – Pauline