在/initializers/time_formats.rb我有這樣的:從Ruby/Rails的默認日期中刪除起始「0」的最簡潔方法是什麼?
Time::DATE_FORMATS[:profile] = "%m/%d/%Y"
但是這顯然會產生的日期,如:09/08/2001
谷歌告訴我,我的最好的辦法是使用某種GSUB的正則表達式來編輯0。這是真的還是有更好的選擇?
在/initializers/time_formats.rb我有這樣的:從Ruby/Rails的默認日期中刪除起始「0」的最簡潔方法是什麼?
Time::DATE_FORMATS[:profile] = "%m/%d/%Y"
但是這顯然會產生的日期,如:09/08/2001
谷歌告訴我,我的最好的辦法是使用某種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()'手冊頁並沒有顯示在幾個月內這樣做的方法,所以正則表達式解決方案可能是一種方法,儘管可能有其他方法更多的Ruby慣用方法來達到相同的結果。
這裏的正則表達式會對穀物有所影響。在使用正則表達式之前,還有其他更直觀的事情可以完成。 – 2009-10-07 16:47:14
感謝喬恩 - 我添加了這一點的解決方案! – drpepper 2009-10-07 17:44:03
@smotchkiss - 我將修改答案以從「可能必要的」中限定正則表達式。 – 2009-10-07 18:32:23
您可以在Time :: DATE_FORMATS中使用lambda/proc作爲格式,例如
Loading development environment (Rails 2.3.4)
>> Time::DATE_FORMATS[:my_format] = lambda { |time| "#{time.day}/#{time.month}/#{time.year}" }
=> #<Proc:[email protected](irb):3>
>> 2.months.ago.to_s(:my_format)
=> "8/8/2009"
注意,默認時間:: DATE_FORMATS使用兩者的:long_ordinal
和:rfc822
格式拉姆達。
不錯,所以我結合了兩個答案獲得@ date.strftime(「#{@ date.month} /%e /%Y」)。似乎有點傻,strftime幾個月沒有像%e這樣的東西。我確信有一個很好的理由,但考慮到時間的限制,我沒有時間考慮這個問題。沒有雙關意圖。好吧,也許。 – drpepper 2009-10-07 17:43:29