3

在我的 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"]

4

5 回答 5

7

在 Rails 中,您可以执行以下操作:

<% 11.downto(0) do |i| %>
  <%= i.months.ago.strftime("%­B %Y") %>
<% end %>
于 2013-04-07T09:29:30.313 回答
5
11.downto(0).map { |m| m.months.ago.strftime("%B %Y") }
#=> ["May 2012", "June 2012", ..., "March 2013", "April 2013"]
于 2013-04-07T09:34:29.457 回答
3
(0..11).map do |month|
    (11.months.ago + month.months).strftime("%B %Y")
end
于 2013-04-07T09:29:34.480 回答
3

只是出于好奇,在 上没有广为人知的漂亮shift运算符Date

(-12..0).inject([]) { 
  |agg, v| agg << Date::MONTHNAMES[(Date.today << v).month] 
}

或者,甚至更简单:

(-12..0).map { |v| Date::MONTHNAMES[(Date.today << v).month] }
于 2013-04-07T09:37:37.237 回答
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")
}
于 2013-04-07T09:32:16.613 回答