Come faccio a formattare una data in rubino per includere “rd” come in “terza” [duplicato]

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

  •  22-08-2019
  •  | 
  •  

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?

È stato utile?

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'

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top