How do I format a date in ruby to include “rd” as in “3rd” [duplicate]

廉价感情. 提交于 2019-11-26 20:14:38

问题


I want to format a date object so that I can display strings such as "3rd July" or "1st October". I can't find an option in Date.strftime to generate the "rd" and "st". Any one know how to do this?


回答1:


I'm going to echo everyone else, but I'll just encourage you to download the activesupport gem, so you can just use it as a library. You don't need all of Rails to use ordinalize.

% gem install activesupport
...
% irb 
irb> require 'rubygems'
#=>  true
irb> require 'activesupport'
#=>  true
irb> 3.ordinalize
#=>  "3rd"



回答2:


Unless you're using Rails, add this ordinalize method (code shamelessly lifted from the Rails source) to the 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

Then format your date like this:

> now = Time.now
> puts now.strftime("#{now.day.ordinalize} of %B, %Y")
=> 4th of July, 2009



回答3:


created_at.strftime("#{created_at.day.ordinalize} of %m, %y")

Will produce "4th of July, 2009"




回答4:


I don't think Ruby has it, but if you have Rails, try this:-

puts 3.ordinalize #=> "3rd"



回答5:


Seems I'm revisiting this topic for a third time, so I've updated my gist with some extra comments / usage.

https://gist.github.com/alterisian/4154152

Cheers, Ian.




回答6:


I don't know if it makes it that much (any?) faster than switch-case, but I made a constant with the endings:

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"]

Then just used it like:

DAY_ENDINGS[date.mday]

As I wanted the ending inside a

<span>th</span>



回答7:


require 'activesupport'
1.ordinal => 'st'
1.ordinalize => '1st'



来源:https://stackoverflow.com/questions/1081926/how-do-i-format-a-date-in-ruby-to-include-rd-as-in-3rd

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!