spanish - ruby time
¿Cómo formateo una fecha en ruby para incluir "rd" como en "3rd" (7)
Esta pregunta ya tiene una respuesta aquí:
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>
Parece que estoy revisando este tema por tercera vez, así que actualicé mi idea con algunos comentarios / uso adicionales.
https://gist.github.com/alterisian/4154152
Saludos, Ian.
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"