2011-02-07 12 views
22

Zastanawiam się, w jaki sposób mogę automatycznie utworzyć arrari stylu "sty 21 sty" w ruby ​​(w szynach3)?Zakres dat w tablicy, ruby ​​

Jeżeli dzisiaj jest 06 lutego, wtedy arrary musiałby [ „06 stycznia”, „07 stycznia” ... „06 lutego”]

+0

Nie rozumiem pytanie. Czy odpowiedź zależy od aktualnej daty? Jakieś inne wejście? Jak wyglądałoby wyjście? Być może powinieneś podać kilka przykładowych danych wejściowych i wyjściowych i zastanowić się, czy ktoś, kto nie wie nic o twoim problemie, zrozumie to pytanie. – DigitalRoss

+0

Przykro mi z powodu niejasności! zaktualizowałem pytanie :) – Elliot

Odpowiedz

70

ja nie wiem, czy całkowicie zrozumiał pytanie, ale oto odpowiedź, która może pomóc

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

Daje na wyjściu

["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"] 

można utworzyć zakres dat, a następnie konwertować je do pożądanego formatu używając strftime

Po prostu upewnij się, że używasz obiektów Date w swoim zasięgu zamiast obiektów Time, w przeciwnym razie utworzysz tablicę każdej sekundy zawartej w tym okresie.

+3

** Uwaga: aby podkreślić, że musisz wystrzegać się działania w zakresie czasu, więc upewnij się, że konwertujesz na format daty, jak pokazano powyżej. Dzięki. ** – edavey

+2

Musisz upewnić się, że dodajesz activesupport, 'require 'active_support/all'', jeśli nie masz w szynach3. – slm

+1

Skąd pochodzi "1"? Gdzie jest. Miesiąc. pochodzi z? czy są w akcji? Czy rzecz "1.month.ago" to rzecz Railsów? – 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 

wyjściowa:

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

Co robi << w odniesieniu do DateTime? Wygląda jak "cofnij się miesiąc", ale ta składnia jest bardzo nieprzejrzysta i nie mogę znaleźć dla niej dokumentacji w klasie DateTime – JDS

+0

DateTime dziedziczy z Data (data jest wymieniona jako nadrzędna w dokumentach). Metoda [<<] (http://www.ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/Date.html#method-- 3C-3C) jest tam udokumentowana. Rzeczywiście wraca on miesiąc. – steenslag

+0

Dzięki. Miałem problem z wpisaniem hasła "<<" – JDS