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

Rails Предыдущее воскресенье в отношении к любой дате

Работа с приложением Rails 3. Учитывая DateTime, мне нужно создать Datetime для предыдущего воскресенья. Если DateTime - воскресенье, то я хочу, чтобы это воскресенье вернулось. Вот несколько примеров:

November 7, 2011 => November 6, 2011
November 6, 2011 => November 6, 2011
November 5, 2011 => October 30, 2011

Любые идеи? Я немного застрял.

4b9b3361

Ответ 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