2011-11-11 14 views
25

Rails 3 uygulamasıyla çalışma. Bir DateTime verildiğinde, önceki Pazar için Datetime'ı üretmem gerekiyor. Eğer DateTime bir Pazar ise, o Pazarın kendisini geri istiyorum. İşte bazı örnekler:Raylar Önceki Pazar Herhangi Bir Tarih ile İlişkili

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

Herhangi bir fikir? Biraz sıkışmışım.

cevap

34
class DateTime 
    def previous_sunday 
    self - wday 
    end 
end 

... ama bu çok kolay, maymun için bir neden

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 (hafta içi) Herhangi Pazar 0 olacak :) sınıfa yama ve orada hiçbir değişiklik için tarih gerçekleşecek.

+0

Muhteşem. Teşekkürler! – Mike

+1

DateTime.now yerine Date.today'ı kullanırdım. – Sprachprofi

+1

@Sprachprofi Evet, ancak OP bir DateTime' için bir 'Tarih' istedi. – Phrogz

36

Rayların, haftanın başlangıcını hesaplamak için bir kolaylık yöntemi vardır.

irb(main):001:0> Date.today.beginning_of_week(:sunday) 
#=> Sun, 16 Dec 2012 

diğer olasılıklar için Date Raylar uzantıları bakınız: http://api.rubyonrails.org/classes/Date.html

+1

Bu harika! – shicholas

İlgili konular