Comment formater une date en Ruby pour inclure « e » comme dans « 3 » [double]

StackOverflow https://stackoverflow.com/questions/1081926

  •  22-08-2019
  •  | 
  •  

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?

Était-ce utile?

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'

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top