Rails Предыдущее воскресенье в отношении к любой дате
Работа с приложением Rails 3. Учитывая DateTime, мне нужно создать Datetime для предыдущего воскресенья. Если DateTime - воскресенье, то я хочу, чтобы это воскресенье вернулось. Вот несколько примеров:
November 7, 2011 => November 6, 2011
November 6, 2011 => November 6, 2011
November 5, 2011 => October 30, 2011
Любые идеи? Я немного застрял.
Ответы
Ответ 1
class DateTime
def previous_sunday
self - wday
end
end
... но это так просто, нет никаких причин, чтобы обезьяна вставляла его в класс:)
irb(main):001:0> require 'date'; now = DateTime.now
#=> #<DateTime: 2011-11-10T21:10:04-07:00 (…)>
irb(main):002:0> sunday = now - now.wday
#=> #<DateTime: 2011-11-06T21:10:04-07:00 (…)>
wday
(день недели) будет 0
для любого воскресенья, поэтому изменения даты не будут.
Ответ 2
У Rails есть метод удобства расчета начала недели.
irb(main):001:0> Date.today.beginning_of_week(:sunday)
#=> Sun, 16 Dec 2012
Смотрите расширения Date
Rails для других возможностей: http://api.rubyonrails.org/classes/Date.html