- #
- A
- B
- C
- D
- E
- F
- I
- M
- N
- P
- R
- S
- T
- W
- X
- Y
DAYS_INTO_WEEK | = | { :monday => 0, :tuesday => 1, :wednesday => 2, :thursday => 3, :friday => 4, :saturday => 5, :sunday => 6 } |
DATE_FORMATS | = | { :short => "%e %b", :long => "%B %e, %Y", :db => "%Y-%m-%d", :number => "%Y%m%d", :long_ordinal => lambda { |date| date.strftime("%B #{ActiveSupport::Inflector.ordinalize(date.day)}, %Y") }, # => "April 25th, 2007" :rfc822 => "%e %b %Y" } |
Returns Time.zone.today when
Time.zone
or config.time_zone
are set, otherwise
just returns Date.today.
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 40 def current ::Time.zone ? ::Time.zone.today : ::Date.today end
Returns a new Date representing the date 1 day after today (i.e. tomorrow’s date).
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 35 def tomorrow ::Date.current.tomorrow end
Returns a new Date representing the date 1 day ago (i.e. yesterday’s date).
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 30 def yesterday ::Date.current.yesterday end
Backported from 1.9. The one in 1.8 leads to incorrect #next_month and friends for dates where the calendar reform is involved. It additionally prevents an infinite loop fixed in r27013.
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 16 def >>(n) y, m = (year * 12 + (mon - 1) + n).divmod(12) m, = (m + 1) .divmod(1) d = mday until jd2 = self.class.valid_civil?(y, m, d, start) d -= 1 raise ArgumentError, 'invalid date' unless d > 0 end self + (jd2 - jd) end
Duck-types as a Date-like class. See Object#acts_like?.
Source: show
# File activesupport/lib/active_support/core_ext/date/acts_like.rb, line 5 def acts_like_date? true end
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: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 108 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
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: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 62 def ago(seconds) to_time_in_current_zone.since(-seconds) end
Converts Date to a Time (or DateTime if necessary) with the time portion set to the beginning of the day (0:00)
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 74 def beginning_of_day to_time_in_current_zone end
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)
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 208 def beginning_of_month self.acts_like?(:time) ? change(:day => 1, :hour => 0) : change(:day => 1) end
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)
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 221 def beginning_of_quarter beginning_of_month.change(:month => [10, 7, 4, 1].detect { |m| m <= self.month }) end
Returns a new Date/DateTime representing the “start” of this week (i.e, Monday; DateTime objects will have time set to 0:00).
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 178 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
Returns a new Date/DateTime representing the start of the year (1st of january; DateTime objects will have time set to 0:00)
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 233 def beginning_of_year self.acts_like?(:time) ? change(:month => 1, :day => 1, :hour => 0) : change(:month => 1, :day => 1) 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: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 124 def change(options) ::Date.new( options[:year] || self.year, options[:month] || self.month, options[:day] || self.day ) end
Converts Date to a Time (or DateTime if necessary) with the time portion set to the end of the day (23:59:59)
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 82 def end_of_day to_time_in_current_zone.end_of_day end
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)
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 214 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
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)
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 227 def end_of_quarter beginning_of_month.change(:month => [3, 6, 9, 12].detect { |m| m >= self.month }).end_of_month end
Returns a new Date/DateTime representing the end of this week (Sunday, DateTime objects will have time set to 23:59:59).
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 187 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
Returns a new Time representing the end of the year (31st of december; DateTime objects will have time set to 23:59:59)
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 239 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
Returns true if the Date object’s date lies in the future.
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 56 def future? self > ::Date.current end
Source: show
# File activesupport/lib/active_support/core_ext/date/conversions.rb, line 97 def iso8601 strftime('%F') end
Returns a new Date/DateTime representing the time a number of specified months ago.
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 138 def months_ago(months) advance(:months => -months) end
Returns a new Date/DateTime representing the time a number of specified months in the future.
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 143 def months_since(months) advance(:months => months) end
Shorthand for #months_since(1)
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 173 def next_month months_since(1) end
Returns a new Date/DateTime representing the start of the given day in next week (default is Monday).
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 202 def next_week(day = :monday) result = (self + 7).beginning_of_week + DAYS_INTO_WEEK[day] self.acts_like?(:time) ? result.change(:hour => 0) : result end
Shorthand for #years_since(1)
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 163 def next_year years_since(1) end
Returns true if the Date object’s date lies in the past. Otherwise returns false.
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 46 def past? self < ::Date.current end
Shorthand for #months_ago(1)
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 168 def prev_month months_ago(1) end
Returns a new Date/DateTime representing the start of the given day in the previous week (default is Monday).
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 196 def prev_week(day = :monday) result = (self - 7).beginning_of_week + DAYS_INTO_WEEK[day] self.acts_like?(:time) ? result.change(:hour => 0) : result end
Shorthand for #years_ago(1)
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 158 def prev_year years_ago(1) end
Overrides the default inspect method with a human readable one, e.g., “Mon, 21 Feb 2005”
Source: show
# File activesupport/lib/active_support/core_ext/date/conversions.rb, line 60 def readable_inspect strftime("%a, %d %b %Y") 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: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 68 def since(seconds) to_time_in_current_zone.since(seconds) end
A method to keep Time, Date
and DateTime instances interchangeable on
conversions. In this case, it simply returns self
.
Source: show
# File activesupport/lib/active_support/core_ext/date/conversions.rb, line 68 def to_date self 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.
Examples
date = Date.new(2007, 11, 10) # => Sat, 10 Nov 2007 date.to_datetime # => Sat, 10 Nov 2007 00:00:00 0000
Source: show
# File activesupport/lib/active_support/core_ext/date/conversions.rb, line 93 def to_datetime ::DateTime.civil(year, month, day, 0, 0, 0, 0) 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.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"
Adding your own time formats to #to_formatted_s
You can add your own formats to the Date::DATE_FORMATS hash. Use the format name as the hash key and either a strftime string or Proc instance that takes a date argument as the value.
# config/initializers/time_formats.rb Date::DATE_FORMATS[:month_and_year] = "%B %Y" Date::DATE_FORMATS[:short_ordinal] = lambda { |date| date.strftime("%B #{date.day.ordinalize}") }
Source: show
# File activesupport/lib/active_support/core_ext/date/conversions.rb, line 45 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
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
Source: show
# File activesupport/lib/active_support/core_ext/date/conversions.rb, line 82 def to_time(form = :local) ::Time.send("#{form}_time", year, month, day) end
Converts Date to a TimeWithZone in the current zone if Time.zone or Time.zone_default is set, otherwise converts Date to a Time via #to_time
Source: show
# File activesupport/lib/active_support/core_ext/date/zones.rb, line 7 def to_time_in_current_zone if ::Time.zone ::Time.zone.local(year, month, day) else to_time end end
Returns true if the Date object’s date is today.
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 51 def today? self.to_date == ::Date.current # we need the to_date because of DateTime end
Convenience method which returns a new Date/DateTime representing the time 1 day since the instance time
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 250 def tomorrow self + 1 end
Returns a new Date/DateTime representing the time a number of specified weeks ago.
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 133 def weeks_ago(weeks) advance(:weeks => -weeks) end
Source: show
# File activesupport/lib/active_support/core_ext/date/conversions.rb, line 103 def xmlschema to_time_in_current_zone.xmlschema end
Returns a new Date/DateTime representing the time a number of specified years ago.
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 148 def years_ago(years) advance(:years => -years) end
Returns a new Date/DateTime representing the time a number of specified years in the future.
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 153 def years_since(years) advance(:years => years) end
Convenience method which returns a new Date/DateTime representing the time 1 day ago
Source: show
# File activesupport/lib/active_support/core_ext/date/calculations.rb, line 245 def yesterday self - 1 end