Ruby найдет следующий четверг (или в любой день недели)
Каков наилучший способ рассчитать дату, месяц и год следующего четверга (или любого дня) с сегодняшнего дня в Ruby?
ОБНОВЛЕНИЕ. Чтобы создать фиктивные объекты, я пытаюсь выяснить, как рассчитать случайное время. В целом, я хотел бы создать случайное время между 5 и 10 вечера в следующий четверг недели.
Ответы
Ответ 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"