Подтвердить что ты не робот

Ruby найдет следующий четверг (или в любой день недели)

Каков наилучший способ рассчитать дату, месяц и год следующего четверга (или любого дня) с сегодняшнего дня в Ruby?

ОБНОВЛЕНИЕ. Чтобы создать фиктивные объекты, я пытаюсь выяснить, как рассчитать случайное время. В целом, я хотел бы создать случайное время между 5 и 10 вечера в следующий четверг недели.

4b9b3361

Ответ 1

DateTime.now.next_week.next_day(3)удаp >

Как пояснил Нилс Ридеманн:

Имейте в виду, что он не получит следующий четверг, но в четверг следующей недели. например. Если завтра будет четверг, он не вернется завтра, но на следующей неделе в четверг.

Вот фрагмент кода, который я написал недавно, который обрабатывает недостающий случай.

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 ... > 

Ответ 2

date = Date.today
date += 1 + ((3-date.wday) % 7)
# date is now next Thursday

Ответ 3

Помимо получения следующего четверга, как описаны другие, Ruby предоставляет простые методы для получения месяца и года с любой даты:

month = date.month
year = date.year

Внутри Rails вы можете легко получить следующий четверг как таковой:

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

Ответ 4

IMO chronic библиотека потрясающая для таких вещей.

Код Ruby будет выглядеть следующим образом:

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

Ответ 5

Этот ответ также короткий и простой fooobar.com/info/192545/...

def date_of_next(day)
  date  = Date.parse(day)
  delta = date > Date.today ? 0 : 7
  date + delta
end

date_of_next "Thursday"