Module: ActiveSupport::CoreExtensions::Date::Conversions

Included in:
Date
Defined in:
lib/active_support/core_ext/date/conversions.rb

Overview

Getting dates in different convenient string representations and other objects

Constant Summary collapse

DATE_FORMATS =
{
  :short        => "%e %b",
  :long         => "%B %e, %Y",
  :db           => "%Y-%m-%d",
  :long_ordinal => lambda { |date| date.strftime("%B #{date.day.ordinalize}, %Y") }, # => "April 25th, 2007"
  :rfc822       => "%e %b %Y"
}

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object

:nodoc:



14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/active_support/core_ext/date/conversions.rb', line 14

def self.included(base) #:nodoc:
  base.instance_eval do
    alias_method :to_default_s, :to_s
    alias_method :to_s, :to_formatted_s
    alias_method :default_inspect, :inspect
    alias_method :inspect, :readable_inspect

    # Ruby 1.9 has Date#to_time which converts to localtime only.
    remove_method :to_time if base.instance_methods.include?(:to_time)

    # Ruby 1.9 has Date#xmlschema which converts to a string without the time component.
    remove_method :xmlschema if base.instance_methods.include?(:xmlschema)
  end
end

Instance Method Details

#readable_inspectObject

Overrides the default inspect method with a human readable one, e.g., “Mon, 21 Feb 2005”



57
58
59
# File 'lib/active_support/core_ext/date/conversions.rb', line 57

def readable_inspect
  strftime("%a, %d %b %Y")
end

#to_dateObject

A method to keep Time, Date and DateTime instances interchangeable on conversions. In this case, it simply returns self.



63
64
65
# File 'lib/active_support/core_ext/date/conversions.rb', line 63

def to_date
  self
end

#to_datetimeObject

Converts a Date instance to a DateTime, where the time is set to the beginning of the day and UTC offset is set to 0.

Example:

date = Date.new(2007, 11, 10)  # => Sat, 10 Nov 2007

date.to_datetime               # => Sat, 10 Nov 2007 00:00:00 0000


88
89
90
# File 'lib/active_support/core_ext/date/conversions.rb', line 88

def to_datetime
  ::DateTime.civil(year, month, day, 0, 0, 0, 0)
end

#to_formatted_s(format = :default) ⇒ Object

Convert to a formatted string - see DATE_FORMATS for predefined formats. You can also add your own formats to the DATE_FORMATS constant and use them with this method.

This method is also aliased as to_s.

Examples:

date = Date.new(2007, 11, 10)       # => Sat, 10 Nov 2007

date.to_formatted_s(:db)            # => "2007-11-10"
date.to_s(:db)                      # => "2007-11-10"

date.to_formatted_s(:short)         # => "10 Nov"
date.to_formatted_s(:long)          # => "November 10, 2007"
date.to_formatted_s(:long_ordinal)  # => "November 10th, 2007"
date.to_formatted_s(:rfc822)        # => "10 Nov 2007"


44
45
46
47
48
49
50
51
52
53
54
# File 'lib/active_support/core_ext/date/conversions.rb', line 44

def to_formatted_s(format = :default)
  if formatter = DATE_FORMATS[format]
    if formatter.respond_to?(:call)
      formatter.call(self).to_s
    else
      strftime(formatter)
    end
  else
    to_default_s
  end
end

#to_time(form = :local) ⇒ Object

Converts a Date instance to a Time, where the time is set to the beginning of the day. The timezone can be either :local or :utc (default :local).

Examples:

date = Date.new(2007, 11, 10)  # => Sat, 10 Nov 2007

date.to_time                   # => Sat Nov 10 00:00:00 0800 2007
date.to_time(:local)           # => Sat Nov 10 00:00:00 0800 2007

date.to_time(:utc)             # => Sat Nov 10 00:00:00 UTC 2007


77
78
79
# File 'lib/active_support/core_ext/date/conversions.rb', line 77

def to_time(form = :local)
  ::Time.send("#{form}_time", year, month, day)
end

#xmlschemaObject



92
93
94
# File 'lib/active_support/core_ext/date/conversions.rb', line 92

def xmlschema
  to_time.xmlschema
end