You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Rails中生成包含月份与年份拼接值的数组如何实现?

实现方案

方法1:日期范围映射(简洁写法)

直接通过日期范围迭代生成,无需手动处理年份递增逻辑:

# 定义起始月份
start_date = Date.new(2020, 1, 1)
# 定义结束月份为上个月
end_date = 1.month.ago.to_date
# 生成目标数组
month_array = (start_date..end_date).map do |date|
  date.strftime("%B %Y")
end.uniq

说明:strftime的%B参数会输出完整英文月份名,%Y输出4位年份,uniq用于过滤同一个月多个日期生成的重复字符串。

方法2:按月步进(性能更优,适合大时间跨度场景)

避免遍历范围内所有日期,直接按月迭代:

start_date = Date.new(2020, 1, 1)
end_date = 1.month.ago.to_date
month_array = []
current_date = start_date
while current_date <= end_date
  month_array << current_date.strftime("%B %Y")
  current_date = current_date.next_month
end

补充说明

  • 不需要手动拼接Date::MONTHNAMES和年份,原生日期迭代会自动处理12月跨年的年份递增逻辑,不会出现边界错误
  • 如果需要输出其他语言的月份名,可将strftime替换为Rails本地化方法 I18n.l(date, format: "%B %Y"),提前配置对应语言的locale文件即可生效

内容的提问来源于stack exchange,提问作者sebT-max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:27:05