Uses Date to provide precise Time calculations for years, months, and days. The options parameter takes a hash with any of these keys: :years, :months, :weeks, :days, :hours, :minutes, :seconds.
# File lib/more/facets/date.rb, line 284 284: def advance(options) 285: d = to_date.advance(options) 286: datetime_advanced_by_date = change(:year => d.year, :month => d.month, :day => d.day) 287: seconds_to_advance = (options[:seconds] || 0) + (options[:minutes] || 0) * 60 + (options[:hours] || 0) * 3600 288: seconds_to_advance == 0 ? datetime_advanced_by_date : datetime_advanced_by_date.since(seconds_to_advance) 289: end
Returns a new DateTime representing the time a number of seconds ago Do not use this method in combination with x.months, use months_ago instead!
# File lib/more/facets/date.rb, line 293 293: def ago(seconds) 294: self.since(-seconds) 295: end
Returns a new DateTime representing the start of the day (0:00)
# File lib/more/facets/date.rb, line 305 305: def beginning_of_day 306: change(:hour => 0) 307: end
Returns a new DateTime where one or more of the elements have been changed according to the options parameter. The time options (hour, minute, sec) reset cascadingly, so if only the hour is passed, then minute and sec is set to 0. If the hour and minute is passed, then sec is set to 0.
# File lib/more/facets/date.rb, line 267 267: def change(options) 268: ::DateTime.civil( 269: options[:year] || self.year, 270: options[:month] || self.month, 271: options[:day] || self.day, 272: options[:hour] || self.hour, 273: options[:min] || (options[:hour] ? 0 : self.min), 274: options[:sec] || ((options[:hour] || options[:min]) ? 0 : self.sec), 275: options[:offset] || self.offset, 276: options[:start] || self.start 277: ) 278: end
Returns a new DateTime representing the end of the day (23:59:59)
# File lib/more/facets/date.rb, line 311 311: def end_of_day 312: change(:hour => 23, :min => 59, :sec => 59) 313: end
# File lib/more/facets/date.rb, line 202 202: def future? 203: self > ::DateTime.current 204: end
# File lib/more/facets/date.rb, line 206 206: def past? 207: self < ::DateTime.current 208: end
Seconds since midnight: DateTime.now.seconds_since_midnight
# File lib/more/facets/date.rb, line 258 258: def seconds_since_midnight 259: self.sec + (self.min * 60) + (self.hour * 3600) 260: end
Returns a new DateTime representing the time a number of seconds since the instance time Do not use this method in combination with x.months, use months_since instead!
# File lib/more/facets/date.rb, line 299 299: def since(seconds) 300: self + Rational(seconds.round, 86400) 301: end
Convert to a formatted string. See Time::FORMAT for predefined formats.
This method is aliased to to_s.
datetime = DateTime.civil(2007, 12, 4, 0, 0, 0, 0) # => Tue, 04 Dec 2007 00:00:00 +0000 datetime.stamp(:db) # => "2007-12-04 00:00:00" datetime.stamp(:db) # => "2007-12-04 00:00:00" datetime.stamp(:number) # => "20071204000000" datetime.stamp(:short) # => "04 Dec 00:00" datetime.stamp(:long) # => "December 04, 2007 00:00" datetime.stamp(:rfc822) # => "Tue, 04 Dec 2007 00:00:00 +0000"
DateTime formats are shared with Time. You can add your own to the Time::FORMAT hash. Use the format name as the hash key and a strftime string as the value. Eg.
Time::FORMAT[:month_and_year] = "%B %Y"
# File lib/more/facets/date.rb, line 249 249: def stamp(format=:default) 250: if formatter = ::Time::FORMAT[format] 251: strftime(formatter) 252: else 253: to_s 254: end 255: end
Converts self to a Ruby Date object; time portion is discarded
# File lib/more/facets/date.rb, line 211 211: def to_date 212: ::Date.new(year, month, day) 213: end
To be able to keep Times, Dates and DateTimes interchangeable on conversions
# File lib/more/facets/date.rb, line 224 224: def to_datetime 225: self 226: end
Converts self to a floating-point number of seconds since the Unix epoch
# File lib/more/facets/date.rb, line 343 343: def to_f 344: days_since_unix_epoch = self - ::DateTime.civil(1970) 345: (days_since_unix_epoch * 86_400).to_f 346: end
Attempts to convert self to a Ruby Time object; returns self if out of range of Ruby Time class. If self has an offset other than 0, self will just be returned unaltered, since there’s no clean way to map it to a Time.
# File lib/more/facets/date.rb, line 219 219: def to_time 220: self.offset == 0 ? ::Time.utc_time(year, month, day, hour, min, sec) : self 221: end
Adjusts DateTime to UTC by adding its offset value; offset is set to 0
Example:
DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(-6, 24)) # => Mon, 21 Feb 2005 10:11:12 -0600 DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(-6, 24)).utc # => Mon, 21 Feb 2005 16:11:12 +0000
# File lib/more/facets/date.rb, line 322 322: def utc 323: new_offset(0) 324: end
Returns true if offset == 0
# File lib/more/facets/date.rb, line 328 328: def utc? 329: offset == 0 330: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.