Desidero formattare un oggetto data in modo che sia possibile visualizzare stringhe come "3 luglio" o "1 ° ottobre". Non riesco a trovare un'opzione in Date.strftime per generare "rd" e "st". Qualcuno sa come farlo?Come formattare una data in ruby per includere "rd" come in "3rd"
risposta
ho intenzione di eco tutti gli altri, ma mi limiterò a vi incoraggio a scaricare il activesupport
gemma, così puoi semplicemente utilizzarlo come una biblioteca. Non hai bisogno di tutti i Rails per usare ordinalize
.
% gem install activesupport ... % irb irb> require 'rubygems' #=> true irb> require 'activesupport' #=> true irb> 3.ordinalize #=> "3rd"
Non credo Ruby ha, ma se si dispone di Rails, provate questo: -
puts 3.ordinalize #=> "3rd"
È disponibile anche in Facets. – Pesto
created_at.strftime("#{created_at.day.ordinalize} of %m, %y")
produrrà "4 lug 2009"
Ho dovuto aggiungere un # davanti {ma questo ha funzionato bene Grazie! – xenon
come ordinalizzare le variabili stringa? Ho bisogno di girare% m per esempio. – Batman
Questo è bello quando è necessario utilizzare il formato atipico "4 luglio" ma non è necessario ordinalizzare a mano se si utilizza il convenzionale "4 luglio 2009": 'created_at.to_date.to_s (: long_ordinal)' . –
meno che non sei utilizzando Rails, aggiungere questo metodo di ordinalize (codice spudoratamente sollevato dalla sorgente Rails) al 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
quindi formattare la data in questo modo:
> now = Time.now
> puts now.strftime("#{now.day.ordinalize} of %B, %Y")
=> 4th of July, 2009
Si noti che questa risposta è un po 'obsoleta. [Ecco come appare ora] (https://github.com/rails/rails/blob/3f96b6973b82ad17e443dd1d21be05996fb6fbf0/activesupport/lib/active_support/inflector/methods.rb#L312-L347) e [ecco l'estensione all 'Integer 'classe] (https://github.com/rails/rails/blob/08754f12e65a9ec79633a605e986d0f1ffa4b251/activesupport/lib/active_support/core_ext/integer/inflections.rb). – Dennis
Sembra 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
Cheers, Ian.
Non so se rende molto (qualsiasi?) Più veloce di switch-case, ma ho fatto una costante con le terminazioni:
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 basta lo usavano come:
DAY_ENDINGS[date.mday]
come avrei voluto il finale all'interno di un
<span>th</span>
richiedono 'ActiveSupport'
1.ordinal => 'st'
1.ordinalize => '1st'
Buon punto. È anche possibile ottenere questa funzionalità dalle faccette (http: //facets.rubyforge.org) library - richiede 'facet' o, per questo metodo, richiede 'facet/integer/ordinal' –
Come si estrae solo l'ordinalizzazione? Voglio '' 3 th '' – Volte
Volte: '3.ordinalize.sub (/ \ w + /, ' \ 0')' – rampion