Class/Module Index [+]

Quicksearch

ActiveSupport::CoreExtensions::Date::Calculations

Enables the use of time calculations within Date itself

Public Instance Methods

advance(options) click to toggle source

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

# File lib/active_support/core_ext/date/calculations.rb, line 94
def advance(options)
  options = options.dup
  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) click to toggle source

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

# File lib/active_support/core_ext/date/calculations.rb, line 52
def ago(seconds)
  to_time.since(-seconds)
end
at_beginning_of_day() click to toggle source
Alias for: beginning_of_day
at_beginning_of_month() click to toggle source
Alias for: beginning_of_month
at_beginning_of_quarter() click to toggle source
at_beginning_of_week() click to toggle source
Alias for: beginning_of_week
at_beginning_of_year() click to toggle source
Alias for: beginning_of_year
at_end_of_month() click to toggle source
Alias for: end_of_month
at_end_of_quarter() click to toggle source
Alias for: end_of_quarter
at_end_of_week() click to toggle source
Alias for: end_of_week
at_end_of_year() click to toggle source
Alias for: end_of_year
at_midnight() click to toggle source
Alias for: beginning_of_day
beginning_of_day() click to toggle source

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

# File lib/active_support/core_ext/date/calculations.rb, line 64
def beginning_of_day
  to_time
end
beginning_of_month() click to toggle source

Returns a new ; DateTime objects will have time set to 0:00DateTime representing the start of the month (1st of the month; DateTime objects will have time set to 0:00)

# File lib/active_support/core_ext/date/calculations.rb, line 193
def beginning_of_month
  self.acts_like?(:time) ? change(:day => 1,:hour => 0, :min => 0, :sec => 0) : change(:day => 1)
end
Also aliased as: at_beginning_of_month
beginning_of_quarter() click to toggle source

Returns a new Date/DateTime representing the start of the quarter (1st of january, april, july, october; DateTime objects will have time set to 0:00)

# File lib/active_support/core_ext/date/calculations.rb, line 206
def beginning_of_quarter
  beginning_of_month.change(:month => [10, 7, 4, 1].detect { |m| m <= self.month })
end
Also aliased as: at_beginning_of_quarter
beginning_of_week() click to toggle source

Returns a new Date/DateTime representing the "start" of this week (i.e, Monday; DateTime objects will have time set to 0:00)

# File lib/active_support/core_ext/date/calculations.rb, line 169
def beginning_of_week
  days_to_monday = self.wday!=0 ? self.wday-1 : 6
  result = self - days_to_monday
  self.acts_like?(:time) ? result.midnight : result
end
Also aliased as: monday, at_beginning_of_week
beginning_of_year() click to toggle source

Returns a new Date/DateTime representing the start of the year (1st of january; DateTime objects will have time set to 0:00)

# File lib/active_support/core_ext/date/calculations.rb, line 218
def beginning_of_year
  self.acts_like?(:time) ? change(:month => 1, :day => 1, :hour => 0, :min => 0, :sec => 0) : change(:month => 1, :day => 1)
end
Also aliased as: at_beginning_of_year
change(options) click to toggle source

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)
# File lib/active_support/core_ext/date/calculations.rb, line 110
def change(options)
  ::Date.new(
    options[:year]  || self.year,
    options[:month] || self.month,
    options[:day]   || self.day
  )
end
end_of_day() click to toggle source

Converts Date to a Time (or DateTime if necessary) with the time portion set to the end of the day (23:59:59)

# File lib/active_support/core_ext/date/calculations.rb, line 72
def end_of_day
  to_time.end_of_day
end
end_of_month() click to toggle source

Returns a new Date/DateTime representing the end of the month (last day of the month; DateTime objects will have time set to 0:00)

# File lib/active_support/core_ext/date/calculations.rb, line 199
def end_of_month
  last_day = ::Time.days_in_month( self.month, self.year )
  self.acts_like?(:time) ? change(:day => last_day, :hour => 23, :min => 59, :sec => 59) : change(:day => last_day)
end
Also aliased as: at_end_of_month
end_of_quarter() click to toggle source

Returns a new Date/DateTime representing the end of the quarter (last day of march, june, september, december; DateTime objects will have time set to 23:59:59)

# File lib/active_support/core_ext/date/calculations.rb, line 212
def end_of_quarter
  beginning_of_month.change(:month => [3, 6, 9, 12].detect { |m| m >= self.month }).end_of_month
end
Also aliased as: at_end_of_quarter
end_of_week() click to toggle source

Returns a new Date/DateTime representing the end of this week (Sunday, DateTime objects will have time set to 23:59:59)

# File lib/active_support/core_ext/date/calculations.rb, line 178
def end_of_week
  days_to_sunday = self.wday!=0 ? 7-self.wday : 0
  result = self + days_to_sunday.days
  self.acts_like?(:time) ? result.end_of_day : result
end
Also aliased as: at_end_of_week
end_of_year() click to toggle source

Returns a new Time representing the end of the year (31st of december; DateTime objects will have time set to 23:59:59)

# File lib/active_support/core_ext/date/calculations.rb, line 224
def end_of_year
  self.acts_like?(:time) ? change(:month => 12,:day => 31,:hour => 23, :min => 59, :sec => 59) : change(:month => 12, :day => 31)
end
Also aliased as: at_end_of_year
future?() click to toggle source

Tells whether the Date object's date lies in the future

# File lib/active_support/core_ext/date/calculations.rb, line 46
def future?
  self > ::Date.current
end
in(seconds) click to toggle source
Alias for: since
midnight() click to toggle source
Alias for: beginning_of_day
monday() click to toggle source
Alias for: beginning_of_week
months_ago(months) click to toggle source

Returns a new Date/DateTime representing the time a number of specified months ago

# File lib/active_support/core_ext/date/calculations.rb, line 119
def months_ago(months)
  advance(:months => -months)
end
months_since(months) click to toggle source

Returns a new Date/DateTime representing the time a number of specified months in the future

# File lib/active_support/core_ext/date/calculations.rb, line 124
def months_since(months)
  advance(:months => months)
end
next_month() click to toggle source

Short-hand for months_since(1)

# File lib/active_support/core_ext/date/calculations.rb, line 164
def next_month
  months_since(1)
end
next_week(day = :monday) click to toggle source

Returns a new Date/DateTime representing the start of the given day in next week (default is Monday).

# File lib/active_support/core_ext/date/calculations.rb, line 186
def next_week(day = :monday)
  days_into_week = { :monday => 0, :tuesday => 1, :wednesday => 2, :thursday => 3, :friday => 4, :saturday => 5, :sunday => 6}
  result = (self + 7).beginning_of_week + days_into_week[day]
  self.acts_like?(:time) ? result.change(:hour => 0) : result
end
next_year() click to toggle source

Short-hand for years_since(1)

# File lib/active_support/core_ext/date/calculations.rb, line 149
def next_year
  years_since(1)
end
past?() click to toggle source

Tells whether the Date object's date lies in the past

# File lib/active_support/core_ext/date/calculations.rb, line 36
def past?
  self < ::Date.current
end
prev_month() click to toggle source

Short-hand for months_ago(1)

# File lib/active_support/core_ext/date/calculations.rb, line 159
def prev_month
  months_ago(1)
end
prev_year() click to toggle source

Short-hand for years_ago(1)

# File lib/active_support/core_ext/date/calculations.rb, line 144
def prev_year
  years_ago(1)
end
since(seconds) click to toggle source

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

# File lib/active_support/core_ext/date/calculations.rb, line 58
def since(seconds)
  to_time.since(seconds)
end
Also aliased as: in
today?() click to toggle source

Tells whether the Date object's date is today

# File lib/active_support/core_ext/date/calculations.rb, line 41
def today?
  self.to_date == ::Date.current # we need the to_date because of DateTime
end
tomorrow() click to toggle source

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

# File lib/active_support/core_ext/date/calculations.rb, line 235
def tomorrow
  self + 1
end
years_ago(years) click to toggle source

Returns a new Date/DateTime representing the time a number of specified years ago

# File lib/active_support/core_ext/date/calculations.rb, line 129
def years_ago(years)
  advance(:years => -years)
end
years_since(years) click to toggle source

Returns a new Date/DateTime representing the time a number of specified years in the future

# File lib/active_support/core_ext/date/calculations.rb, line 134
def years_since(years)
  advance(:years => years)
end
yesterday() click to toggle source

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

# File lib/active_support/core_ext/date/calculations.rb, line 230
def yesterday
  self - 1
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.