Ruby如何解析日期字符串并输出带th后缀的指定格式日期
问题描述
我有一个日期字符串'2020-02-10 8,00',需要将其转换为Monday, 10th of February格式。目前我已经通过Date.parse '2020-02-10 8,00'将字符串解析为日期对象,请问该如何实现所需的格式化效果?
解决方案
你可以按照运行环境选择以下两种实现方式:
1. Ruby on Rails 环境(无需额外依赖)
Rails内置的ActiveSupport已经提供了序数后缀生成方法,直接组合strftime格式化即可:
# 先解析得到日期对象 date = Date.parse('2020-02-10 8,00') # 格式化输出 result = date.strftime("%A, #{date.day.ordinalize} of %B")
各参数说明:
%A:输出完整星期英文名称%B:输出完整月份英文名称ordinalize:自动为日期数字添加对应序数后缀(st/nd/rd/th),可自动适配11/12/13这类特殊规则的日期
2. 纯Ruby环境(无Rails依赖)
自行实现序数后缀逻辑,再拼接格式化结果即可:
# 实现序数后缀生成方法 def ordinalize(day) return "#{day}th" if [11,12,13].include?(day % 100) case day % 10 when 1 then "#{day}st" when 2 then "#{day}nd" when 3 then "#{day}rd" else "#{day}th" end end # 解析并格式化 date = Date.parse('2020-02-10 8,00') result = date.strftime("%A, #{ordinalize(date.day)} of %B")
两种方式最终输出结果均为Monday, 10th of February,符合需求。
内容的提问来源于stack exchange,提问作者mr_muscle
相关产品推荐
相关产品推荐

