class DateTime
Public Class Methods
# File lib/standard/facets/date.rb, line 200 def self.local_offset ::Time.local(2007).utc_offset.to_r / 86400 end
Public Instance Methods
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/standard/facets/date.rb, line 286 def advance(options) d = to_date.advance(options) datetime_advanced_by_date = change(:year => d.year, :month => d.month, :day => d.day) seconds_to_advance = (options[:seconds] || 0) + (options[:minutes] || 0) * 60 + (options[:hours] || 0) * 3600 seconds_to_advance == 0 ? datetime_advanced_by_date : datetime_advanced_by_date.since(seconds_to_advance) 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/standard/facets/date.rb, line 295 def ago(seconds) self.since(-seconds) end
Returns a new DateTime representing the start of the day (0:00)
# File lib/standard/facets/date.rb, line 307 def beginning_of_day change(:hour => 0) 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/standard/facets/date.rb, line 269 def change(options) ::DateTime.civil( options[:year] || self.year, options[:month] || self.month, options[:day] || self.day, options[:hour] || self.hour, options[:min] || (options[:hour] ? 0 : self.min), options[:sec] || ((options[:hour] || options[:min]) ? 0 : self.sec), options[:offset] || self.offset, options[:start] || self.start ) end
Returns a new DateTime representing the end of the day (23:59:59)
# File lib/standard/facets/date.rb, line 313 def end_of_day change(:hour => 23, :min => 59, :sec => 59) end
# File lib/standard/facets/date.rb, line 204 def future? self > ::DateTime.current end
# File lib/standard/facets/date.rb, line 208 def past? self < ::DateTime.current end
Seconds since midnight: DateTime.now.seconds_since_midnight
# File lib/standard/facets/date.rb, line 260 def seconds_since_midnight self.sec + (self.min * 60) + (self.hour * 3600) 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/standard/facets/date.rb, line 301 def since(seconds) self + Rational(seconds.round, 86400) 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"
Adding your own datetime formats to stamp¶ ↑
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/standard/facets/date.rb, line 251 def stamp(format=:default) if formatter = ::Time::FORMAT[format] strftime(formatter) else to_s end end
Converts self to a Ruby Date object; time portion is discarded
# File lib/standard/facets/date.rb, line 213 def to_date ::Date.new(year, month, day) end
To be able to keep Times, Dates and DateTimes interchangeable on conversions
# File lib/standard/facets/date.rb, line 226 def to_datetime self end
Converts self to a floating-point number of seconds since the Unix epoch
# File lib/standard/facets/date.rb, line 345 def to_f days_since_unix_epoch = self - ::DateTime.civil(1970) (days_since_unix_epoch * 86_400).to_f 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/standard/facets/date.rb, line 221 def to_time self.offset == 0 ? ::Time.utc_time(year, month, day, hour, min, sec) : self 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/standard/facets/date.rb, line 324 def utc new_offset(0) end
Returns true if offset == 0
# File lib/standard/facets/date.rb, line 330 def utc? offset == 0 end
Returns the offset value in seconds
# File lib/standard/facets/date.rb, line 335 def utc_offset (offset * 86400).to_i end
Converts datetime to an appropriate format for use in XML
# File lib/standard/facets/date.rb, line 340 def xmlschema strftime("%Y-%m-%dT%H:%M:%S%Z") end