2009-10-07 16 views

回答

2
@date = Time.new 
@date.month #=> 10 
@date.day #=> 7 
@date.year #=> 2009 

,如果你想使用格式字符串一些地方,你可以這樣做:

@date.strftime("%B #{@date.day.ordinalize}, %Y") #=> October 7th, 2009 
+0

不錯,所以我結合了兩個答案獲得@ date.strftime(「#{@ date.month} /%e /%Y」)。似乎有點傻,strftime幾個月沒有像%e這樣的東西。我確信有一個很好的理由,但考慮到時間的限制,我沒有時間考慮這個問題。沒有雙關意圖。好吧,也許。 – drpepper 2009-10-07 17:43:29

1

你也許可以用「%E」,讓天數沒有前導零;然而,通常在這些基於時間的轉換之後的'strftime()'手冊頁並沒有顯示在幾個月內這樣做的方法,所以正則表達式解決方案可能是一種方法,儘管可能有其他方法更多的Ruby慣用方法來達到相同的結果。

+0

這裏的正則表達式會對穀物有所影響。在使用正則表達式之前,還有其他更直觀的事情可以完成。 – 2009-10-07 16:47:14

+0

感謝喬恩 - 我添加了這一點的解決方案! – drpepper 2009-10-07 17:44:03

+0

@smotchkiss - 我將修改答案以從「可能必要的」中限定正則表達式。 – 2009-10-07 18:32:23

0

您可以在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格式拉姆達。

相關問題