日付を次の形式で表示したい: 短い曜日、短い月、日付の先頭に 0 を付けず、"th"、"st"、"nd"、または "rd" の接尾辞を含む。
たとえば、この質問が行われた日は「Thu Oct 2nd」と表示されます。
私はRuby 1.8.7を使用しています.Time.strftimeはこれをしていないようです. 標準ライブラリが存在する場合は、標準ライブラリを使用したいと思います。
日付を次の形式で表示したい: 短い曜日、短い月、日付の先頭に 0 を付けず、"th"、"st"、"nd"、または "rd" の接尾辞を含む。
たとえば、この質問が行われた日は「Thu Oct 2nd」と表示されます。
私は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"
Ruby 2.0 で IRB を使用している場合は、最初に次を実行する必要があります。
require 'active_support/core_ext/integer/inflections'
数値に対して、active_support の ordinalize ヘルパー メソッドを使用できます。
>> 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}") }
)
>> require 'activesupport'
=> []
>> t = Time.now
=> Thu Oct 02 17:28:37 -0700 2008
>> formatted = "#{t.strftime("%a %b")} #{t.day.ordinalize}"
=> "Thu Oct 2nd"
私は Bartosz の答えが好きですが、これは私たちが話している Rails であるため、よこしまな一歩を踏み出しましょう。(編集:次の方法をモンキーパッチするだけでしたが、よりクリーンな方法があることがわかりました。)
DateTime
インスタンスにはto_formatted_s
ActiveSupport が提供するメソッドがあり、単一のシンボルをパラメーターとして取り、そのシンボルが有効な事前定義された形式として認識された場合、適切な形式の文字列を返します。
これらのシンボルはTime::DATE_FORMATS
、標準の書式設定関数の文字列または procs へのシンボルのハッシュである によって定義されます。ブワハハ。
d = DateTime.now #Examples were executed on October 3rd 2008
Time::DATE_FORMATS[:weekday_month_ordinal] =
lambda { |time| time.strftime("%a %b #{time.day.ordinalize}") }
d.to_formatted_s :weekday_month_ordinal #Fri Oct 3rd
でもねえ、モンキーパッチをする機会に抵抗できないなら、いつでもよりクリーンなインターフェースを与えることができます:
class DateTime
Time::DATE_FORMATS[:weekday_month_ordinal] =
lambda { |time| time.strftime("%a %b #{time.day.ordinalize}") }
def to_my_special_s
to_formatted_s :weekday_month_ordinal
end
end
DateTime.now.to_my_special_s #Fri Oct 3rd