Class Date
In: lib/more/facets/date.rb
Parent: Object

Date

This new version of Date extension has been largely improved by porting some of the methods used by ActiveSupport. The old version already had much in common with the Active Support library, so it was decided to take it a step further in that direction for the sake of interoparability.

Hopefully most of these methods will find there way into Ruby‘s own standard library eventually.

The biggest difference with ActiveSupport is the lack of many of the "English-esque" methods, and that we use stamp with Date::FORMAT, instead of to_formmated_s with Date::DATE_FORMATS. We do not override the standard to_s method like ActiveSupport does.

Methods

Constants

FORMAT = { :short => "%e %b", :long => "%B %e, %Y", :db => "%Y-%m-%d", :number => "%Y%m%d", :rfc822 => "%e %b %Y", :default => "%Y-%m-%d", nil => "%Y-%m-%d"

Public Class methods

Returns Time.zone.today when config.time_zone is set, otherwise just returns Date.today.

[Source]

    # File lib/more/facets/date.rb, line 43
43:   def self.current
44:     ::Time.zone_default ? ::Time.zone.today : ::Date.today
45:   end

Returns a new Date representing the date 1 day after today (i.e. tomorrow‘s date).

[Source]

    # File lib/more/facets/date.rb, line 38
38:   def self.tomorrow
39:     ::Date.today.tomorrow
40:   end

Returns a new Date representing the date 1 day ago (i.e. yesterday‘s date).

[Source]

    # File lib/more/facets/date.rb, line 33
33:   def self.yesterday
34:     ::Date.today.yesterday
35:   end

Public Instance methods

Provides precise Date calculations for years, months, and days. The options parameter takes a hash with any of these keys: :years, :months, :weeks, :days.

[Source]

     # File lib/more/facets/date.rb, line 139
139:   def advance(options)
140:     d = self
141:     d = d >> options.delete(:years) * 12 if options[:years]
142:     d = d >> options.delete(:months)     if options[:months]
143:     d = d +  options.delete(:weeks) * 7  if options[:weeks]
144:     d = d +  options.delete(:days)       if options[:days]
145:     d
146:   end

Converts Date to a Time (or DateTime if necessary) with the time portion set to the beginning of the day (0:00) and then subtracts the specified number of seconds

[Source]

     # File lib/more/facets/date.rb, line 164
164:   def ago(seconds)
165:     to_time.since(-seconds)
166:   end

Converts Date to a Time (or DateTime if necessary) with the time portion set to the beginning of the day (0:00)

[Source]

     # File lib/more/facets/date.rb, line 176
176:   def beginning_of_day
177:     to_time
178:   end

Returns a new Date where one or more of the elements have been changed according to the options parameter.

Examples:

  Date.new(2007, 5, 12).change(:day => 1)                  # => Date.new(2007, 5, 1)
  Date.new(2007, 5, 12).change(:year => 2005, :month => 1) # => Date.new(2005, 1, 12)

[Source]

     # File lib/more/facets/date.rb, line 154
154:   def change(options)
155:     ::Date.new(
156:       options[:year]  || self.year,
157:       options[:month] || self.month,
158:       options[:day]   || self.day
159:     )
160:   end

Returns the number of days in the date‘s month.

  Date.new(2004,2).days_in_month #=> 28

CREDIT: Ken Kunz.

[Source]

    # File lib/more/facets/date.rb, line 89
89:   def days_in_month
90:      Date.civil(year, month, -1).day
91:   end

[Source]

    # File lib/more/facets/date.rb, line 93
93:   def days_of_month
94:     (1..days_in_month).to_a
95:   end
in(seconds)

Alias for since

midnight()

Alias for beginning_of_day

Get the month name for this date object

CREDIT: Benjamin Oakes

[Source]

     # File lib/more/facets/date.rb, line 101
101:   def month_name
102:     MONTHNAMES[self.month]
103:   end

Converts Date to a Time (or DateTime if necessary) with the time portion set to the beginning of the day (0:00) and then adds the specified number of seconds

[Source]

     # File lib/more/facets/date.rb, line 170
170:   def since(seconds)
171:     to_time.since(seconds)
172:   end

Convert to a formatted string. See DATE_FORMATS for predefined formats.

This method is aliased to to_s.

Examples:

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

  date.stamp(:db)            # => "2007-11-10"
  date.stamp(:short)         # => "10 Nov"
  date.stamp(:long)          # => "November 10, 2007"
  date.stamp(:rfc822)        # => "10 Nov 2007"

Adding your own formats to stamp

You can add your own formats to the Date::FORMAT hash. Use the format name as the hash key and a strftime string as the value. Eg.

  Date::FORMAT[:month_and_year] = "%B %Y"

[Source]

     # File lib/more/facets/date.rb, line 124
124:   def stamp(format=:default)
125:     if formatter = FORMAT[format]
126:       strftime(formatter)
127:     else
128:       to_s
129:     end
130:   end

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

[Source]

    # File lib/more/facets/date.rb, line 49
49:   def to_date
50:     self
51:   end

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

[Source]

    # File lib/more/facets/date.rb, line 60
60:   def to_datetime
61:     ::DateTime.civil(year, month, day, 0, 0, 0, 0)
62:   end

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).

  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

[Source]

    # File lib/more/facets/date.rb, line 74
74:   def to_time(form=:local)
75:     ::Time.send(form, year, month, day)
76:     #::Time.send("#{form}_time", year, month, day)
77:   end

Convenience method which returns a new Date/DateTime representing the time 1 day since the instance time

[Source]

     # File lib/more/facets/date.rb, line 187
187:   def tomorrow
188:     self + 1
189:   end

[Source]

    # File lib/more/facets/date.rb, line 79
79:   def xmlschema
80:     to_time.xmlschema
81:   end

Convenience method which returns a new Date/DateTime representing the time 1 day ago

[Source]

     # File lib/more/facets/date.rb, line 182
182:   def yesterday
183:     self - 1
184:   end

[Validate]