Class: DateTime

Class | DateTime
In: | lib/more/facets/date.rb
Parent: | Object

### Methods

advance ago beginning_of_day change end_of_day getutc in local_offset midnight seconds_since_midnight since stamp to_date to_datetime to_f to_time utc utc? utc_offset xmlschema

### Public Class methods

local_offset()

[Source]

    # File lib/more/facets/date.rb, line 197
      def self.local_offset
        ::Time.local(2007).utc_offset.to_r / 86400
      end

### Public Instance methods

advance(options)

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`.

[Source]

    # File lib/more/facets/date.rb, line 275
      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)

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!

[Source]

    # File lib/more/facets/date.rb, line 284
      def ago(seconds)
        self.since(-seconds)
      end

beginning_of_day()

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

[Source]

    # File lib/more/facets/date.rb, line 296
      def beginning_of_day
        change(:hour => 0)
      end

change(options)

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.

[Source]

    # File lib/more/facets/date.rb, line 258
      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_day()

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

[Source]

    # File lib/more/facets/date.rb, line 302
      def end_of_day
        change(:hour => 23, :min => 59, :sec => 59)
      end

getutc()

Alias for utc

in(seconds)

Alias for since

midnight()

Alias for beginning_of_day

seconds_since_midnight()

Seconds since midnight: DateTime.now.seconds_since_midnight

[Source]

    # File lib/more/facets/date.rb, line 249
      def seconds_since_midnight
        self.sec + (self.min * 60) + (self.hour * 3600)
      end

since(seconds)

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!

[Source]

    # File lib/more/facets/date.rb, line 290
      def since(seconds)
        self + Rational(seconds.round, 86400)
      end

stamp(format=:default)

Convert to a formatted string. See Time::FORMAT for predefined formats.

This method is aliased to `to_s`.

### Examples:

      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"

[Source]

    # File lib/more/facets/date.rb, line 240
      def stamp(format=:default)
        if formatter = ::Time::FORMAT[format]
          strftime(formatter)
        else
          to_s
        end
      end

to_date()

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

[Source]

    # File lib/more/facets/date.rb, line 202
      def to_date
        ::Date.new(year, month, day)
      end

to_datetime()

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

[Source]

    # File lib/more/facets/date.rb, line 215
      def to_datetime
        self
      end

to_f()

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

[Source]

    # File lib/more/facets/date.rb, line 333
      def to_f
        days_since_unix_epoch = self - ::DateTime.civil(1970)
        (days_since_unix_epoch * 86_400).to_f
      end

to_time()

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

[Source]

    # File lib/more/facets/date.rb, line 210
      def to_time
        self.offset == 0 ? ::Time.utc_time(year, month, day, hour, min, sec) : self
      end

utc()

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

[Source]

    # File lib/more/facets/date.rb, line 312
      def utc
        new_offset(0)
      end

utc?()

Returns true if offset == 0

[Source]

    # File lib/more/facets/date.rb, line 318
      def utc?
        offset == 0
      end

utc_offset()

Returns the offset value in seconds

[Source]

    # File lib/more/facets/date.rb, line 323
      def utc_offset
        (offset * 86400).to_i
      end

xmlschema()

Converts datetime to an appropriate format for use in XML

[Source]

    # File lib/more/facets/date.rb, line 328
      def xmlschema
        strftime("%Y-%m-%dT%H:%M:%S%Z")
      end

[Validate]