Como faço para formatar uma data em ruby ??para incluir “rd” como em “3” [duplicado]
Pergunta
Esta questão já tem uma resposta aqui:
Eu quero formatar um objeto de data para que eu possa exibir cordas como "03 de julho" ou "01 de outubro". Não consigo encontrar uma opção no Date.strftime para gerar o "rd" e "ST". Qualquer um sabe como fazer isso?
Solução
Eu vou echo todos os outros, mas eu só vou incentivá-lo a baixar o gem activesupport
, assim você pode simplesmente usá-lo como uma biblioteca. Você não precisa de todos Rails usar ordinalize
.
% gem install activesupport ... % irb irb> require 'rubygems' #=> true irb> require 'activesupport' #=> true irb> 3.ordinalize #=> "3rd"
Outras dicas
A menos que você estiver usando Rails , adicione ordinalize método (código descaradamente levantada a partir da fonte do Rails) para o 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
Em seguida, formatar a data como esta:
> 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")
Será que produzir "04 de julho de 2009"
Eu não acho que Ruby tem isso, mas se você tem Rails, tente o seguinte: -
puts 3.ordinalize #=> "3rd"
Parece que eu estou revisitando este tópico para uma terceira vez, assim que eu atualizei meu essência com alguns comentários de cama / uso.
https://gist.github.com/alterisian/4154152
Cheers, Ian.
Eu não sei se isso faz com que seja muito (qualquer?) Mais rápido do que switch-caso, mas eu fiz uma constante com as terminações:
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"]
Em seguida, apenas utilizado como:
DAY_ENDINGS[date.mday]
Como eu queria o final dentro de um
<span>th</span>
require 'ActiveSupport'
1.ordinal =>
'st'
1.ordinalize => '1'