【问题标题】:Rails how to create an array of months for a select tag? [closed]Rails如何为一个select标签创建一个数组? [关闭]
【发布时间】:2012-09-25 19:47:12
【问题描述】:

我的问题类似于Rails - return an array of months for a select tag

但我想要一个这样的数组:

[
  ["September", 9], 
  ["August", 8],
  ["July", 7], 
  ["June", 6],
  ["May", 5], 
  ["April", 4],
  ["March", 3],
  ["February", 2],
  ["January", 1],
  ["December", 0]
  ["November", -1], 
  ["October", -2]
]

如果当前月份是 10 月,则为:

[
  ["October", 10]
  ["September", 9], 
  ["August", 8],
  ["July", 7], 
  ["June", 6],
  ["May", 5], 
  ["April", 4],
  ["March", 3],
  ["February", 2],
  ["January", 1],
  ["December", 0]
  ["November", -1]
]

【问题讨论】:

  • def 月 = [['-', '']] (1..12).each {|month|月

标签: ruby-on-rails ruby


【解决方案1】:

应该这样做:

require 'date'
Date::MONTHNAMES[1..12].reverse.rotate(12-Time.now.month).each_with_index.collect{|m, i| [m, Time.now.month-i]}

编辑:

正如您在评论中提到的要显示年份,您需要一种不同的方法来“回到过去”。当你使用 rails 时,你可以使用 activerecord 的日期函数来做到这一点:

require 'active_support/core_ext/date/calculations'
t = Time.now
(0..11).collect { |i| current = t.advance(months:-i); ["#{Date::MONTHNAMES[current.month]} #{current.year}", t.month-i ] }

【讨论】:

  • 超级。如何在月份名称后面加上年份?
  • 如果你想要年份,我认为你需要一种不同的方法,因为你需要找出上一年 12 月的年份变化。
  • 我在想是否可以将 2011 添加到所有负值和零值。我认为这将是最简单的解决方案。
  • 不知道Array#rotate,很好用!
  • @Railsbeginner 我添加了另一种方式,可以向后显示月份和年份。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
相关资源
最近更新 更多