2011-11-11 5 views
25

Lavorare con un'applicazione Rails 3. Dato un DateTime, ho bisogno di produrre il Datetime per la domenica precedente. Se il DateTime è una domenica, allora voglio tornare quella domenica stessa. Ecco alcuni esempi:Rails domenica precedente in relazione a qualsiasi DateTime

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

Qualche idea? Sono un po 'bloccato

risposta

34
class DateTime 
    def previous_sunday 
    self - wday 
    end 
end 

... ma questo è così facile, non c'è alcun motivo di scimmia patch nella classe :)

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 (…)> 

Il wday (settimana) sarà 0 per qualsiasi Domenica, e quindi nessun cambiamento di la data avrà luogo.

+0

impressionante. Grazie! – Mike

+1

Invece di DateTime.now, userei Date.today. – Sprachprofi

+1

@Sprachprofi Sì, ma l'OP ha richiesto un 'DateTime', non un' Date'. – Phrogz

36

Rails ha un metodo comodo per calcolare l'inizio della settimana.

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

Vedi le Date Rails estensioni per le altre possibilità: http://api.rubyonrails.org/classes/Date.html

+1

questo è fantastico! – shicholas

Problemi correlati