Class: Date

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

advance ago beginning_of_day change current days_in_month days_of_month in midnight month_name since stamp to_date to_datetime to_time tomorrow tomorrow xmlschema yesterday yesterday

### 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

current()

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

[Source]

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

tomorrow()

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
      def self.tomorrow
        ::Date.today.tomorrow
      end

yesterday()

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

[Source]

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

### Public Instance methods

advance(options)

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
      def advance(options)
        d = self
        d = d >> options.delete(:years) * 12 if options[:years]
        d = d >> options.delete(:months)     if options[:months]
        d = d +  options.delete(:weeks) * 7  if options[:weeks]
        d = d +  options.delete(:days)       if options[:days]
        d
      end

ago(seconds)

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
      def ago(seconds)
        to_time.since(-seconds)
      end

beginning_of_day()

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
      def beginning_of_day
        to_time
      end

change(options)

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
      def change(options)
        ::Date.new(
          options[:year]  || self.year,
          options[:month] || self.month,
          options[:day]   || self.day
        )
      end

days_in_month()

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
      def days_in_month
         Date.civil(year, month, -1).day
      end

days_of_month()

[Source]

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

in(seconds)

Alias for since

midnight()

Alias for beginning_of_day

month_name()

Get the month name for this date object

CREDIT: Benjamin Oakes

[Source]

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

since(seconds)

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
      def since(seconds)
        to_time.since(seconds)
      end

stamp(format=:default)

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
      def stamp(format=:default)
        if formatter = FORMAT[format]
          strftime(formatter)
        else
          to_s
        end
      end

to_date()

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
      def to_date
        self
      end

to_datetime()

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
      def to_datetime
        ::DateTime.civil(year, month, day, 0, 0, 0, 0)
      end

to_time(form=:local)

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
      def to_time(form=:local)
        ::Time.send(form, year, month, day)
        #::Time.send("#{form}_time", year, month, day)
      end

tomorrow()

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
      def tomorrow
        self + 1
      end

xmlschema()

[Source]

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

yesterday()

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

[Source]

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

[Validate]