2009-07-04 12 views

Odpowiedz

23

Idę echo wszyscy inni, ale ja po prostu zachęcamy do pobrania activesupport gem, więc można po prostu użyć go jako Biblioteka. Nie potrzebujesz wszystkich Railsów do korzystania z ordinalize.

 
% gem install activesupport 
... 
% irb 
irb> require 'rubygems' 
#=> true 
irb> require 'activesupport' 
#=> true 
irb> 3.ordinalize 
#=> "3rd" 
+2

Dobra uwaga. Możesz również uzyskać tę funkcjonalność z aspektów (http: //facets.rubyforge.org) - wymagają "faset" lub, dla tej właśnie metody, wymagają "faset/integer/ordinal". –

+0

Jak wyodrębnić just ordinalization? Chcę zrobić '' 3 th '' – Volte

+0

Volte: '3.ordinalize.sub (/ \ w + /, ' \ 0')' – rampion

8

Nie sądzę Ruby ma, ale jeśli masz Rails, spróbuj tego: -

puts 3.ordinalize #=> "3rd" 
+0

Jest również dostępny w Facets. – Pesto

23
created_at.strftime("#{created_at.day.ordinalize} of %m, %y") 

będzie produkować "4 lipca 2009"

+0

Musiałem dodać # przed {ale to działało, dzięki! – xenon

+0

Jak można uporządkować zmienne łańcuchowe? Na przykład muszę obrócić% m. – Batman

+0

To jest miłe, gdy trzeba użyć atypowego formatu "4 lipca", ale nie ma potrzeby ręcznego porządkowania ręcznie, jeśli używasz konwencjonalnego "4 lipca 2009": 'created_at.to_date.to_s (: long_ordinal)' . –

38

Chyba że jesteś stosując szyn, dodaj ordinalize sposób (kod shamelessly podnoszone ze źródła barierki) dostosowany jest do Fixnum klasy

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

następnie sformatować datę tak:

> now = Time.now 
> puts now.strftime("#{now.day.ordinalize} of %B, %Y") 
=> 4th of July, 2009 
+0

Należy pamiętać, że ta odpowiedź jest nieco nieaktualna. [Oto jak teraz wygląda] (https://github.com/rails/rails/blob/3f96b6973b82ad17e443dd1d21be05996fb6fbf0/activesupport/lib/active_support/inflector/methods.rb#L312-L347) i [tutaj jest rozszerzenie do 'Integer 'klasa] (https://github.com/rails/rails/blob/08754f12e65a9ec79633a605e986d0f1ffa4b251/activesupport/lib/active_support/core_ext/integer/inflections.rb). – Dennis

1

ja nie wiem, czy to sprawia, że ​​wiele (każdy?) Szybciej niż switch-case, ale zrobiłem stałą z zakończeń:

DAY_ENDINGS = ["th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "st"] 

Następnie wystarczy stosować się podoba:

DAY_ENDINGS[date.mday] 

jak chciałem zakończenie wewnątrz

<span>th</span> 
1

require 'ActiveSupport'
1.ordinal => 'st'
1.ordinalize => '1st'

Powiązane problemy