Come faccio a formattare una data in rubino per includere “rd” come in “terza” [duplicato]
Domanda
Questa domanda ha già una risposta qui:
Voglio formattare un oggetto data in modo che possa visualizzare le stringhe come il "3 ° Luglio" o "1 ottobre". Non riesco a trovare un'opzione in Date.strftime per generare il "rd" e "ST". Uno sa come fare questo?
Soluzione
ho intenzione di eco tutti gli altri, ma mi limiterò a incoraggiarvi a scaricare la gemma activesupport
, così puoi semplicemente utilizzarlo come una libreria. Non hai bisogno di tutti Rails per usare ordinalize
.
% gem install activesupport ... % irb irb> require 'rubygems' #=> true irb> require 'activesupport' #=> true irb> 3.ordinalize #=> "3rd"
Altri suggerimenti
A meno che non si sta utilizzando Rails , aggiungere questo ordinalize metodo (codice spudoratamente sollevato dalla sorgente Rails) al Fixnum class
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
quindi formattare la data in questo modo:
> 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")
Produrrà "4 lug 2009"
Non credo che Ruby ha, ma se si dispone di Rails, provate questo: -
puts 3.ordinalize #=> "3rd"
Sembra che io sto rivisitare questo argomento per la terza volta, quindi ho aggiornato il mio succo con qualche extra commenti / utilizzo.
https://gist.github.com/alterisian/4154152
Saluti, Ian.
Non so se rende molto (qualsiasi?) Più veloce di switch-case, ma ho fatto una costante con le finali:
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"]
Poi usato solo come:
DAY_ENDINGS[date.mday]
Come ho voluto il finale all'interno di un
<span>th</span>
require 'ActiveSupport'
1.ordinal =>
'st'
1.ordinalize => 'prima'