我想以以下格式显示日期:周的短日,短的月,月中的日期,且不带前导零,但包括“ th”,“ st”,“ nd”或“ rd”后缀。
例如,询问该问题的日期将显示“ 10月2日星期四”。
我正在使用Ruby 1.8.7,而Time.strftime似乎没有这样做。我希望有一个标准库。
使用'active_support'中的ordinalize方法。
>> time = Time.new
=> Fri Oct 03 01:24:48 +0100 2008
>> time.strftime("%a %b #{time.day.ordinalize}")
=> "Fri Oct 3rd"
注意,如果您将IRB与Ruby 2.0一起使用,则必须首先运行:
require 'active_support/core_ext/integer/inflections'
您可以对数字使用active_support的序数化帮助器方法。
>> 3.ordinalize
=> "3rd"
>> 2.ordinalize
=> "2nd"
>> 1.ordinalize
=> "1st"
将Patrick McKenzie的答案再进一步一点,您可以在config/initializers目录中创建一个名为date_format.rb(或任何您想要的文件)的新文件,并将其放入其中:
Time::DATE_FORMATS.merge!(
my_date: lambda { |time| time.strftime("%a, %b #{time.day.ordinalize}") }
)
然后,在您的视图代码中,只需分配新的日期格式,就可以格式化任何日期:
My Date: <%= h some_date.to_s(:my_date) %>
它简单,有效且易于构建。只需在date_format.rb文件中为每种不同的日期格式添加更多格式行。这是一个更加充实的示例。
Time::DATE_FORMATS.merge!(
datetime_military: '%Y-%m-%d %H:%M',
datetime: '%Y-%m-%d %I:%M%P',
time: '%I:%M%P',
time_military: '%H:%M%P',
datetime_short: '%m/%d %I:%M',
due_date: lambda { |time| time.strftime("%a, %b #{time.day.ordinalize}") }
)
举报