Enables the use of time calculations within Time itself
- A
- B
- C
- E
- I
- L
- M
- N
- S
- T
- Y
Uses Date to provide precise Time calculations for years, months, and days. The
options
parameter takes a hash with any of these keys:
:months, :days, :years.
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 49 def advance(options) d = ::Date.new(year + (options.delete(:years) || 0), month, day) d = d >> options.delete(:months) if options[:months] d = d + options.delete(:days) if options[:days] change(options.merge(:year => d.year, :month => d.month, :mday => d.day)) end
Returns a new Time representing the time a number of seconds ago, this is basically a wrapper around the Numeric extension Do not use this method in combination with x.months, use #months_ago instead!
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 58 def ago(seconds) self.since(-seconds) end
Returns a new Time representing the start of the day (0:00)
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 145 def beginning_of_day (self - self.seconds_since_midnight).change(:usec => 0) end
Returns a new Time representing the start of the month (1st of the month, 0:00)
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 153 def beginning_of_month #self - ((self.mday-1).days + self.seconds_since_midnight) change(:mday => 1,:hour => 0, :min => 0, :sec => 0, :usec => 0) end
Returns a new Time representing the start of the quarter (1st of january, april, july, october, 0:00)
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 168 def beginning_of_quarter beginning_of_month.change(:month => [10, 7, 4, 1].detect { |m| m <= self.month }) end
Returns a new Time representing the “start” of this week (Monday, 0:00)
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 131 def beginning_of_week days_to_monday = self.wday!=0 ? self.wday-1 : 6 (self - days_to_monday.days).midnight end
Returns a new Time representing the start of the year (1st of january, 0:00)
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 174 def beginning_of_year change(:month => 1,:mday => 1,:hour => 0, :min => 0, :sec => 0, :usec => 0) end
Returns a new Time where one or more of the
elements have been changed according to the options
parameter.
The time options (hour, minute, sec, usec) reset cascadingly, so if only
the hour is passed, then minute, sec, and usec is set to 0. If the hour and
minute is passed, then sec and usec is set to 0.
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 34 def change(options) ::Time.send( self.utc? ? :utc : :local, options[:year] || self.year, options[:month] || self.month, options[:mday] || self.mday, options[:hour] || self.hour, options[:min] || (options[:hour] ? 0 : self.min), options[:sec] || ((options[:hour] || options[:min]) ? 0 : self.sec), options[:usec] || ((options[:hour] || options[:min] || options[:sec]) ? 0 : self.usec) ) end
Returns a new Time representing the end of the month (last day of the month, 0:00)
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 160 def end_of_month #self - ((self.mday-1).days + self.seconds_since_midnight) last_day = ::Time.days_in_month( self.month, self.year ) change(:mday => last_day,:hour => 0, :min => 0, :sec => 0, :usec => 0) end
Short-hand for #months_ago(1)
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 121 def last_month months_ago(1) end
Short-hand for #years_ago(1)
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 110 def last_year years_ago(1) end
Returns a new Time representing the time a number of specified months ago
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 73 def months_ago(months) months_since(-months) end
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 77 def months_since(months) year, month, mday = self.year, self.month, self.mday month += months # in case months is negative while month < 1 month += 12 year -= 1 end # in case months is positive while month > 12 month -= 12 year += 1 end max = ::Time.days_in_month(month, year) mday = max if mday > max change(:year => year, :month => month, :mday => mday) end
Short-hand for #months_since(1)
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 126 def next_month months_since(1) end
Returns a new Time representing the start of the given day in next week (default is Monday).
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 139 def next_week(day = :monday) days_into_week = { :monday => 0, :tuesday => 1, :wednesday => 2, :thursday => 3, :friday => 4, :saturday => 5, :sunday => 6} since(1.week).beginning_of_week.since(days_into_week[day].day).change(:hour => 0) end
Short-hand for #years_since(1)
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 115 def next_year years_since(1) end
Seconds since midnight: Time.now.#seconds_since_midnight
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 27 def seconds_since_midnight self.to_i - self.change(:hour => 0).to_i + (self.usec/1.0e+6) end
Returns a new Time representing the time a number of seconds since the instance time, this is basically a wrapper around
the Numeric extension. Do not use this method in combination with x.months, use #months_since instead!
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 64 def since(seconds) initial_dst = self.dst? ? 1 : 0 f = seconds.since(self) final_dst = f.dst? ? 1 : 0 (seconds.abs >= 86400 && initial_dst != final_dst) ? f + (initial_dst - final_dst).hours : f end
Convenience method which returns a new Time representing the time 1 day since the instance time
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 185 def tomorrow self.since(1.day) end
Returns a new Time representing the time a number of specified years ago
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 101 def years_ago(years) change(:year => self.year - years) end
Source: show
# File rails/activesupport/lib/active_support/core_ext/time/calculations.rb, line 105 def years_since(years) change(:year => self.year + years) end