Como faço para formatar uma data em ruby ??para incluir “rd” como em “3” [duplicado]

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

  •  22-08-2019
  •  | 
  •  

Pergunta

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?

Foi útil?

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'

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top