Class: DateTime

Inherits:
Object show all
Defined in:
lib/standard/facets/date.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.local_offsetObject


201
202
203
# File 'lib/standard/facets/date.rb', line 201

def self.local_offset
  ::Time.local(2007).utc_offset.to_r / 86400
end

Instance Method Details

#advance(options) ⇒ Object

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.


287
288
289
290
291
292
# File 'lib/standard/facets/date.rb', line 287

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

#ago(seconds) ⇒ Object

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!


296
297
298
# File 'lib/standard/facets/date.rb', line 296

def ago(seconds)
  self.since(-seconds)
end

#beginning_of_dayObject Also known as: midnight

Returns a new DateTime representing the start of the day (0:00)


308
309
310
# File 'lib/standard/facets/date.rb', line 308

def beginning_of_day
  change(:hour => 0)
end

#change(options) ⇒ Object

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.


270
271
272
273
274
275
276
277
278
279
280
281
# File 'lib/standard/facets/date.rb', line 270

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

#end_of_dayObject

Returns a new DateTime representing the end of the day (23:59:59)


314
315
316
# File 'lib/standard/facets/date.rb', line 314

def end_of_day
  change(:hour => 23, :min => 59, :sec => 59)
end

#future?Boolean

Returns:

  • (Boolean)

205
206
207
# File 'lib/standard/facets/date.rb', line 205

def future?
  self > ::DateTime.current
end

#past?Boolean

Returns:

  • (Boolean)

209
210
211
# File 'lib/standard/facets/date.rb', line 209

def past?
  self < ::DateTime.current
end

#seconds_since_midnightObject

Seconds since midnight: DateTime.now.seconds_since_midnight


261
262
263
# File 'lib/standard/facets/date.rb', line 261

def seconds_since_midnight
  self.sec + (self.min * 60) + (self.hour * 3600)
end

#since(seconds) ⇒ Object Also known as: in

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!


302
303
304
# File 'lib/standard/facets/date.rb', line 302

def since(seconds)
  self + Rational(seconds.round, 86400)
end

#stamp(format = :default) ⇒ Object

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"

252
253
254
255
256
257
258
# File 'lib/standard/facets/date.rb', line 252

def stamp(format=:default)
  if formatter = ::Time::FORMAT[format]
    strftime(formatter)
  else
    to_s
  end
end

#to_dateObject

Converts self to a Ruby Date object; time portion is discarded


214
215
216
# File 'lib/standard/facets/date.rb', line 214

def to_date
  ::Date.new(year, month, day)
end

#to_datetimeObject

To be able to keep Times, Dates and DateTimes interchangeable on conversions


227
228
229
# File 'lib/standard/facets/date.rb', line 227

def to_datetime
  self
end

#to_fObject

Converts self to a floating-point number of seconds since the Unix epoch


346
347
348
349
# File 'lib/standard/facets/date.rb', line 346

def to_f
  days_since_unix_epoch = self - ::DateTime.civil(1970)
  (days_since_unix_epoch * 86_400).to_f
end

#to_timeObject

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.


222
223
224
# File 'lib/standard/facets/date.rb', line 222

def to_time
  self.offset == 0 ? ::Time.utc_time(year, month, day, hour, min, sec) : self
end

#utcObject Also known as: getutc

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

325
326
327
# File 'lib/standard/facets/date.rb', line 325

def utc
  new_offset(0)
end

#utc?Boolean

Returns true if offset == 0

Returns:

  • (Boolean)

331
332
333
# File 'lib/standard/facets/date.rb', line 331

def utc?
  offset == 0
end

#utc_offsetObject

Returns the offset value in seconds


336
337
338
# File 'lib/standard/facets/date.rb', line 336

def utc_offset
  (offset * 86400).to_i
end

#xmlschemaObject

Converts datetime to an appropriate format for use in XML


341
342
343
# File 'lib/standard/facets/date.rb', line 341

def xmlschema
  strftime("%Y-%m-%dT%H:%M:%S%Z")
end