yyyy spanish rails now and ruby strftime

spanish - ruby time



¿Cómo formateo una fecha en ruby para incluir "rd" como en "3rd" (7)

Quiero formatear un objeto de fecha para poder mostrar cadenas como "3 de julio" o "1 de octubre". No puedo encontrar una opción en Date.strftime para generar el "rd" y "st". ¿Alguien sabe cómo hacer esto?


A menos que esté usando Rails , agregue este método de ordinalización (código descarado de la fuente de Rails) a 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

Luego formatea tu fecha de esta manera:

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


No creo que Ruby lo tenga, pero si tienes Rails, prueba esto:

puts 3.ordinalize #=> "3rd"


No sé si lo hace (¿alguno?) Más rápido que el cambio de caja, pero hice una constante con los finales:

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

Entonces simplemente lo usé como:

DAY_ENDINGS[date.mday]

Como quería el final dentro de un

<span>th</span>



requiere ''soporte activo''
1.ordinal => ''st''
1.ordinalize => ''1st''


Voy a activesupport eco de todos los demás, pero te animo a que descargues la gema de activesupport , para que puedas usarla como una biblioteca. No necesitas todos los rieles para usar ordinalize .

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


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

Producirá "4 de julio de 2009"