2011-11-11 12 views
25

Praca z aplikacją Rails 3. Biorąc pod uwagę DateTime, muszę wyprodukować Datetime na poprzednią niedzielę. Jeśli DateTime jest niedzielą, to chcę tej samej niedzieli z powrotem. Oto kilka przykładów:Szyny Poprzednia niedziela w odniesieniu do dowolnego DataTime

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

Jakieś pomysły? Trochę utknąłem.

Odpowiedz

34
class DateTime 
    def previous_sunday 
    self - wday 
    end 
end 

... ale jest to tak proste, że nie ma powodu, aby małpy załatać je do klasy :)

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 (w dni robocze) będzie 0 dla każdej niedzieli, a więc bez zmian Data będzie miała miejsce.

+0

niesamowite. Dzięki! – Mike

+1

Zamiast DateTime.now, użyłbym Date.today. – Sprachprofi

+1

@Sprachprofi Tak, ale OP poprosił o "DateTime", a nie "Date". – Phrogz

Powiązane problemy