Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I format a date in ruby to include "rd" as in "3rd"

Tags:

ruby

strftime

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?

like image 892
Laurie Young Avatar asked Jul 04 '09 10:07

Laurie Young


3 Answers

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
like image 192
Lars Haugseth Avatar answered Oct 15 '22 10:10

Lars Haugseth


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

Will produce "4th of July, 2009"

like image 20
Barry Gallagher Avatar answered Oct 15 '22 10:10

Barry Gallagher


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"
like image 41
rampion Avatar answered Oct 15 '22 10:10

rampion