我想用季度和年份格式化日期,例如
2018年第一季度
有没有办法使用 strftime 或 I18n.l 来做到这一点?我在文档中看不到任何 RE 季度。
我一直在做
month = datum.recorded_at.month - 1
quarter = (month / 3) + 1
"Q#{quarter} #{datum.recorded_at.strftime('%y')}"
但这不是一个好方法,因为它不容易本地化(例如,我们的一些白标合作伙伴可能希望以不同的方式格式化日期,而不是使用季度)
听起来您已经知道如何计算季度,但您不确定如何组织代码以允许灵活的格式设置,而无需硬编码使用季度的特定格式。
您需要的是让strftime
有一个季度的"格式指令"(例如%q
)
您可以重写strftime
以添加新指令,但通常最好避免覆盖此类内容。
相反,我建议定义您自己的格式化模块,该模块可以理解其他所有内容的%q
和搭载strftime
:
module MyDateFormatter
def self.format_date(date, format)
quarter = get_quarter(date)
date.strftime(format.gsub("%q", "Q#{quarter}"))
end
def self.get_quarter(date)
# Put whatever quarter calculation you want to use here
end
end
想要使用季度的客户端可以具有包含特殊%q
指令的格式字符串,而不需要使用季度的客户端可以具有不使用%q
的格式字符串。