web-dev-qa-db-ja.com

Ruby次の木曜日(または任意の曜日)を検索)

Rubyで今日から次の木曜日(または任意の日)の日付、月、年を計算する最良の方法は何ですか?

[〜#〜] update [〜#〜]ダミーオブジェクトを作成するために、ランダムな時間を計算する方法を見つけようとしています。全体として、次の週の木曜日に5から10の間のランダムな時間を生成したいと思いますPM。

21
neon

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 ... > 
21
Adam Eberlin
date = Date.today
date += 1 + ((3-date.wday) % 7)
# date is now next Thursday
36
millimoose

他の人が説明したように来週の木曜日を取得する以外に、Rubyは、任意の日付から月と年を取得する簡単な方法を提供します。

month = date.month
year = date.year

Railsの内部では、次の木曜日は次のように簡単に取得できます。

next_thur = Date.today.next_week.advance(:days=>3)
19
WattsInABox

IMO chronic ライブラリはこのようなものに最適です。

Rubyコードは次のようになります:

def date_of_next(day)
    Chronic.parse('next #{day}')
end
12
Dave Newton

この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"
4
Sreenivasan AC