扩展@steenslag 的答案以解决两个问题:
-
%e 模式是用空格填充的,这会导致间距不一致(使用 %-d)
- 扩展 case 语句以处理两位数的月份日期 (21 - 31)
def format(time)
time.strftime("%A %-d, %l:%M%P").sub!(/\d?\d/) do |day|
case day
when "1", "21", "31" then "#{day}st"
when "2", "22" then "#{day}nd"
when "3", "23" then "#{day}rd"
else "#{day}th"
end
end
end
p format(Time.new(2020, 1, 1))
p format(Time.new(2020, 1, 2))
p format(Time.new(2020, 1, 3))
p format(Time.new(2020, 1, 4))
p format(Time.new(2020, 1, 11))
p format(Time.new(2020, 1, 12))
p format(Time.new(2020, 1, 13))
p format(Time.new(2020, 1, 14))
p format(Time.new(2020, 1, 21))
p format(Time.new(2020, 1, 22))
p format(Time.new(2020, 1, 23))
p format(Time.new(2020, 1, 24))
p format(Time.new(2020, 1, 30))
p format(Time.new(2020, 1, 31))