| Class | DateTime |
| In: |
lib/more/facets/date.rb
|
| Parent: | Object |
# File lib/more/facets/date.rb, line 197
197: def self.local_offset
198: ::Time.local(2007).utc_offset.to_r / 86400
199: end
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 275
275: def advance(options)
276: d = to_date.advance(options)
277: datetime_advanced_by_date = change(:year => d.year, :month => d.month, :day => d.day)
278: seconds_to_advance = (options[:seconds] || 0) + (options[:minutes] || 0) * 60 + (options[:hours] || 0) * 3600
279: seconds_to_advance == 0 ? datetime_advanced_by_date : datetime_advanced_by_date.since(seconds_to_advance)
280: 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 258
258: def change(options)
259: ::DateTime.civil(
260: options[:year] || self.year,
261: options[:month] || self.month,
262: options[:day] || self.day,
263: options[:hour] || self.hour,
264: options[:min] || (options[:hour] ? 0 : self.min),
265: options[:sec] || ((options[:hour] || options[:min]) ? 0 : self.sec),
266: options[:offset] || self.offset,
267: options[:start] || self.start
268: )
269: end
Seconds since midnight: DateTime.now.seconds_since_midnight
# File lib/more/facets/date.rb, line 249
249: def seconds_since_midnight
250: self.sec + (self.min * 60) + (self.hour * 3600)
251: 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 240
240: def stamp(format=:default)
241: if formatter = ::Time::FORMAT[format]
242: strftime(formatter)
243: else
244: to_s
245: end
246: end
To be able to keep Times, Dates and DateTimes interchangeable on conversions
# File lib/more/facets/date.rb, line 215
215: def to_datetime
216: self
217: 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 210
210: def to_time
211: self.offset == 0 ? ::Time.utc_time(year, month, day, hour, min, sec) : self
212: 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 312
312: def utc
313: new_offset(0)
314: end
Returns true if offset == 0
# File lib/more/facets/date.rb, line 318
318: def utc?
319: offset == 0
320: end