Comment formater une date en Ruby pour inclure « e » comme dans « 3 » [double]
Question
Cette question a déjà une réponse ici:
Je veux formater un objet date afin que je puisse afficher des chaînes telles que « 3rd Juillet » ou « 1er Octobre ». Je ne peux pas trouver une option Date.strftime pour générer le « e » et « st ». Quelqu'un sait comment faire cela?
La solution
Je vais faire écho à tout le monde, mais je vais vous encourager à télécharger le joyau de activesupport
, de sorte que vous pouvez simplement l'utiliser comme une bibliothèque. Vous n'avez pas besoin tous Rails utiliser ordinalize
.
% gem install activesupport ... % irb irb> require 'rubygems' #=> true irb> require 'activesupport' #=> true irb> 3.ordinalize #=> "3rd"
Autres conseils
Sauf si vous utilisez Rails , ajoutez ordinalize méthode (code sans vergogne levée de la source Rails) à la Fixnum classe
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
Ensuite, formatez votre date comme ceci:
> now = Time.now
> puts now.strftime("#{now.day.ordinalize} of %B, %Y")
=> 4th of July, 2009
created_at.strftime("#{created_at.day.ordinalize} of %m, %y")
Produira "4th of Juillet, 2009"
Je ne pense pas que Ruby a, mais si vous avez Rails, essayez ceci: -
puts 3.ordinalize #=> "3rd"
Je Semble ce sujet pour revisiter une troisième fois, donc je l'ai mis à jour mon point essentiel avec quelques commentaires supplémentaires / utilisation.
https://gist.github.com/alterisian/4154152
Cordialement, Ian.
Je ne sais pas si cela fait beaucoup (tout?) Plus vite que l'interrupteur cas, mais je fait une constante avec les terminaisons:
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"]
Alors juste utilisé comme il:
DAY_ENDINGS[date.mday]
Comme je voulais la fin dans un
<span>th</span>
require 'activesupport'
1.ordinal => 'st'
1.ordinalize => '1er'