Rubyで今日から次の木曜日(または任意の日)の日付、月、年を計算する最良の方法は何ですか?
[〜#〜] update [〜#〜]ダミーオブジェクトを作成するために、ランダムな時間を計算する方法を見つけようとしています。全体として、次の週の木曜日に5から10の間のランダムな時間を生成したいと思いますPM。
DateTime.now.next_week.next_day(3)
@Nils Riedemannが指摘したように:
次の木曜日ではなく、翌週の木曜日になることに注意してください。例えば。明日が木曜日だった場合、明日は戻りませんが、来週の木曜日です。
これは私が最近書いたいくつかのコードの抜粋で、行方不明のケースを処理します。
require 'date'
module DateTimeMixin
def next_week
self + (7 - self.wday)
end
def next_wday (n)
n > self.wday ? self + (n - self.wday) : self.next_week.next_day(n)
end
end
# Example
Ruby-1.9.3-p194 :001 > x = DateTime.now.extend(DateTimeMixin)
=> #<DateTime: 2012-10-19T15:46:57-05:00 ... >
Ruby-1.9.3-p194 :002 > x.next_week
=> #<DateTime: 2012-10-21T15:46:57-05:00 ... >
Ruby-1.9.3-p194 :003 > x.next_wday(4)
=> #<DateTime: 2012-10-25T15:46:57-05:00 ... >
date = Date.today
date += 1 + ((3-date.wday) % 7)
# date is now next Thursday
他の人が説明したように来週の木曜日を取得する以外に、Rubyは、任意の日付から月と年を取得する簡単な方法を提供します。
month = date.month
year = date.year
Railsの内部では、次の木曜日は次のように簡単に取得できます。
next_thur = Date.today.next_week.advance(:days=>3)
IMO chronic ライブラリはこのようなものに最適です。
Rubyコードは次のようになります:
def date_of_next(day)
Chronic.parse('next #{day}')
end
このSO答えも短くて単純です https://stackoverflow.com/a/7930553/3766839
def date_of_next(day)
date = Date.parse(day)
delta = date > Date.today ? 0 : 7
date + delta
end
date_of_next "Thursday"