在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
相关产品推荐
相关产品推荐

