2011-02-07 1 views
22

Mi stavo chiedendo come posso procedere a creare un arrary all'ultimo mese di "21 gennaio" stile ecc. Automaticamente in ruby ​​(in rails3)?Intervallo di date in un array, rubino

Se oggi è 6 febbraio, poi l'arrary avrebbe [ "Jan 6", "7 gennaio" ... "6 febbraio"]

+0

Non capisco la domanda. La risposta dipende dalla data corrente? Qualche altro input? Come sarebbe l'output? Forse dovresti fornire alcuni esempi di input e output e pensare se qualcuno che non sa nulla del tuo problema possa capire la domanda. – DigitalRoss

+0

Mi dispiace per la vaghezza! ha aggiornato la domanda :) – Elliot

risposta

70

Non so se ho completamente capito la domanda, ma ecco una risposta che potrebbe aiutare

(1.month.ago.to_date..Date.today).map{ |date| date.strftime("%b %d") } 

uscite

["Jan 07", "Jan 08", "Jan 09", "Jan 10", "Jan 11", "Jan 12", "Jan 13", "Jan 14", "Jan 15", "Jan 16", "Jan 17", "Jan 18", "Jan 19", "Jan 20", "Jan 21", "Jan 22", "Jan 23", "Jan 24", "Jan 25", "Jan 26", "Jan 27", "Jan 28", "Jan 29", "Jan 30", "Jan 31", "Feb 01", "Feb 02", "Feb 03", "Feb 04", "Feb 05", "Feb 06"] 

È possibile creare un intervallo di date, e poi convertirli nel formato desiderato utilizzando strftime

Assicurati di utilizzare gli oggetti Date nell'intervallo anziché gli oggetti Time, altrimenti creerai un array di ogni secondo incluso in tale intervallo.

+3

** NB: solo per sottolineare che è necessario fare attenzione a operare su un intervallo di tempo, quindi assicuratevi di convertire in formato Data come visto sopra. Grazie. ** – edavey

+2

Devi assicurarti di includere il supporto di actives, 'richiede 'active_support/all'', se non sei in rails3. – slm

+1

Da dove proviene "1"? Dov'è .month. proveniente da? sono quelli in supporto attivo? La cosa "1.month.ago" è una cosa di Rails? – JDS

9
require 'date' 
now = Date.today 
p (now<<1 .. now).map{ |day| day.strftime("%b %e").squeeze(' ') } 
# No railsy .month.ago.to_date silliness! 
# the squeeze gets rid of the occasional extra space 

uscita:

["Jan 7", "Jan 8", "Jan 9", "Jan 10", (...), "Feb 7"] 
+0

Cosa fa il << fare rispetto a DateTime? Sembra "tornare indietro un mese" ma quella sintassi è molto opaca e non riesco a trovare la documentazione per la classe DateTime – JDS

+0

DateTime eredita dalla data (la data è elencata come genitore nei documenti). Il [metodo <<] (http://www.ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/Date.html#method-i-3C-3C) è documentato lì. Ritorna davvero un mese. – steenslag

+0

Grazie. Ho avuto problemi a cercare su google "<<" – JDS