/initializers/time_formats.rbに私はこれを持っています:
Time::DATE_FORMATS[:profile] = "%m / %d / %Y"
ただし、これは明らかに次のような日付を生成します:09/08/2001
Googleによると、私の最善の策は、ある種のgsub正規表現を使用して0を編集することです。これは本当ですか、それともより良い代替手段がありますか?
/initializers/time_formats.rbに私はこれを持っています:
Time::DATE_FORMATS[:profile] = "%m / %d / %Y"
ただし、これは明らかに次のような日付を生成します:09/08/2001
Googleによると、私の最善の策は、ある種のgsub正規表現を使用して0を編集することです。これは本当ですか、それともより良い代替手段がありますか?
@date = Time.new
@date.month #=> 10
@date.day #=> 7
@date.year #=> 2009
一部の部分にフォーマット文字列を使用する場合は、次のようにすることができます。
@date.strftime("%B #{@date.day.ordinalize}, %Y") #=> October 7th, 2009
'%e'を使用して、先行ゼロなしの日番号を取得できます。ただし、「strftime()」のマニュアルページ(通常、これらの時間ベースの変換の基礎となる)は、数か月間それを行う方法を示していないため、正規表現ソリューションはおそらくそれを行う1つの方法ですが、他の方法もあるかもしれません。同等の結果を達成するためのRubyの慣用的な方法。
Time::DATE_FORMATSのフォーマットとしてラムダ/プロシージャを使用できます。
Loading development environment (Rails 2.3.4)
>> Time::DATE_FORMATS[:my_format] = lambda { |time| "#{time.day}/#{time.month}/#{time.year}" }
=> #<Proc:0x000000010341a2e0@(irb):3>
>> 2.months.ago.to_s(:my_format)
=> "8/8/2009"
デフォルトのTime::DATE_FORMATSは、:long_ordinal
と:rfc822
フォーマットの両方にラムダを使用することに注意してください。