2009-07-04 9 views

Respuesta

23

voy a repetir todos los demás, pero yo sólo te animo a descargar la gema activesupport, por lo que sólo se puede utilizar como una biblioteca. No necesita todos los Rails para usar ordinalize.

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

Buen punto. También puede obtener esta funcionalidad desde las facetas (http: //facets.rubyforge.org) library - require 'facets' o, solo para este método, requiere 'facets/integer/ordinal' –

+0

¿Cómo extraemos solo la ordinalización? Quiero hacer '' 3 th '' – Volte

+0

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

8

No creo que Ruby tiene, pero si usted tiene rieles, intente lo siguiente: -

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

También está disponible en Facetas. – Pesto

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

producirá "el 4 de Julio de 2009"

+0

Tuve que agregar un # delante del {pero esto funcionó como un regalo ¡Gracias! – xenon

+0

¿cómo ordenarías las variables de cadena? Necesito convertir% m, por ejemplo. – Batman

+0

Esto es bueno cuando necesitas usar el formato atípico "4 de julio", pero no hay necesidad de ordinalizar a mano si estás usando el "4 de julio de 2009" convencional: 'created_at.to_date.to_s (: long_ordinal)' . –

38

A menos que seas usando Rails, añadir este ordinalize método (código descaradamente levantado de la fuente de carriles) para la clase Fixnum

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 

A continuación, formatee la fecha de la siguiente manera:

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

Tenga en cuenta que esta respuesta está un poco desactualizada. [Así es como se ve ahora] (https://github.com/rails/rails/blob/3f96b6973b82ad17e443dd1d21be05996fb6fbf0/activesupport/lib/active_support/inflector/methods.rb#L312-L347) y [aquí está la extensión del 'Entero 'clase] (https://github.com/rails/rails/blob/08754f12e65a9ec79633a605e986d0f1ffa4b251/activesupport/lib/active_support/core_ext/integer/inflections.rb). – Dennis

1

No sé si lo hace mucho (cualquier?) Más rápido que el switch de los casos, pero he hecho una constante con las terminaciones:

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"] 

A continuación, sólo lo utilizaron gustaría:

DAY_ENDINGS[date.mday] 

como quería el final dentro de un

<span>th</span> 
1

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

Cuestiones relacionadas