在我的ruby代码中,我想显示过去1年的所有月份名称。例如,当前日期为"April 2013"
,然后我想显示从"May 2012"
到"April 2013"
的所有月份名称,例如["May", "June", .., "April"]
。对此最好的想法是什么?
我试过了:
<%= (1.year.ago.to_date.strftime("%B")..Date.today.strftime("%B")).map %> { |a| a } %>
但它给出了:["April"]
。
答案 0 :(得分:7)
在Rails中,您可以执行以下操作:
<% 11.downto(0) do |i| %>
<%= i.months.ago.strftime("%B %Y") %>
<% end %>
答案 1 :(得分:5)
11.downto(0).map { |m| m.months.ago.strftime("%B %Y") }
#=> ["May 2012", "June 2012", ..., "March 2013", "April 2013"]
答案 2 :(得分:3)
(0..11).map do |month|
(11.months.ago + month.months).strftime("%B %Y")
end
答案 3 :(得分:3)
出于好奇,Date
上没有广为人知的漂亮shift
运算符:
(-12..0).inject([]) {
|agg, v| agg << Date::MONTHNAMES[(Date.today << v).month]
}
或者,甚至更简单:
(-12..0).map { |v| Date::MONTHNAMES[(Date.today << v).month] }
答案 4 :(得分:1)
试试这个:
(0..11).each { |i|
month = (Date.today.month + i) % 12 + 1;
puts Date.new(Date.today.year - 1 + (month < Date.today.month ? 0 : 1), month).strftime("%B %Y")
}