2013-11-27 73 views
2

我尋找哪裏可以日期轉換成更大的人類可讀的格式的方法...例如:在紅寶石將日期到自定義格式

2013年12月2日可以被轉換爲「2013年12月2日」 2013年12月3日,應轉換爲「2013年12月3日」 2013年11月27日可轉換爲「2013年11月27日」

是用Ruby/Rails的任何功能一應俱全使用或者我必須自己寫一些東西來處理日期編號以外的「st」,「nd」,「rd」和「th」?

+0

檢查這個http://apidock.com/ruby/ DateTime/strftime – shiva

+0

http://stackoverflow.com/questions/165170/in-ruby-on-rails-how-do-i-format-a-date-with-the-th-suffix-as-in-sun- oct-5 – hirolau

+0

謝謝,我掃描了strftime(),但根據我的需求找不到任何東西。我能夠得到這可以幫助我得到我的格式化日期,我可以在解析日期後使用ordinalize函數 – Kush

回答

10

你可以試試這個

t = Time.now() 
t.strftime("#{t.day.ordinalize} %B %Y") 

這將導致

27th November 2013 
1

您應該使用strftime函數(在幾種語言中可用)來格式化時間和日期。

在你的情況下,以最小的努力就可以實現一些相當不錯的成績:

Time.now.strftime("%e %b %Y") #=> "27 Nov 2013" 

對於ordinalization,編寫自定義的功能或使用Rails的ordinalize(如前建議)。

這裏的源:

def ordinalize(number) 
    if (11..13).include?(number.to_i.abs % 100) 
    "#{number}th" 
    else 
    case number.to_i.abs % 10 
     when 1; "#{number}st" 
     when 2; "#{number}nd" 
     when 3; "#{number}rd" 
     else "#{number}th" 
    end 
    end 
end 
0

用途:Time.now.strftime(「%A%B %d,%Y「)

=> "Wed November 15, 2013" 

==> today = Time.now 
==> today = today.strftime("%a %B #{t.day.ordinalize}, %Y") 
==> "Wed November 27th, 2013" 
0

如果你經常這樣做,那麼郵票寶石是非常有用的 - https://github.com/jeremyw/stamp

它允許你做這樣的事情:

date = Date.new(2011, 6, 9) 
date.stamp("Sunday, May 1, 2000") #=> "Thursday, June 9, 2011" 
date.stamp("Sun Aug 5")    #=> "Thu Jun 9" 
date.stamp("12/31/99")    #=> "06/09/11" 
date.stamp("DOB: 12/31/2000")  #=> "DOB: 06/09/2011" 
date.stamp("November 5th")   #=> "June 9th" 
date.stamp("1st of Jan")   #=> "9th of Jun"