Spec-Zone.ru › Ruby on Rails 4.2

класс DateTime

Родитель:
Объект
Включенные модули:
DateAndTime::Compatibility, DateAndTime::Zones

Публичные методы класса

civil_from_format(utc_or_local, year, month=1, day=1, hour=0, min=0, sec=0) Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/conversions.rb, line 65
def self.civil_from_format(utc_or_local, year, month=1, day=1, hour=0, min=0, sec=0)
  if utc_or_local.to_sym == :local
    offset = ::Time.local(year, month, day).utc_offset.to_r / 86400
  else
    offset = 0
  end
  civil(year, month, day, hour, min, sec, offset)
end

Возвращает DateTime с локальным смещением для данного года, если формат локальный, иначе смещение равно нулю.

DateTime.civil_from_format :local, 2012
# => Sun, 01 Jan 2012 00:00:00 +0300
DateTime.civil_from_format :local, 2012, 12, 17
# => Mon, 17 Dec 2012 00:00:00 +0000
current() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/calculations.rb, line 8
def current
  ::Time.zone ? ::Time.zone.now.to_datetime : ::Time.now.to_datetime
end

Возвращает Time.zone.now.to_datetime когда Time.zone или config.time_zone установлены, в противном случае возвращает Time.now.to_datetime.

Публичные методы экземпляра

<=>(other) Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/calculations.rb, line 183
def <=>(other)
  if other.kind_of?(Infinity)
    super
  elsif other.respond_to? :to_datetime
    super other.to_datetime rescue nil
  else
    nil
  end
end

Добавляет дополнительное поведение к DateTime#<=>, чтобы экземпляры Time и ActiveSupport::TimeWithZone можно было сравнивать с DateTime.

Вызывает метод суперкласса
acts_like_date?() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/acts_like.rb, line 6
def acts_like_date?
  true
end

Утиная типизация как класс, подобный Date. См. Object#acts_like?.

acts_like_time?() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/acts_like.rb, line 11
def acts_like_time?
  true
end

Утиная типизация как класс, подобный Time. См. Object#acts_like?.

advance(options) Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/calculations.rb, line 62
def advance(options)
  unless options[:weeks].nil?
    options[:weeks], partial_weeks = options[:weeks].divmod(1)
    options[:days] = options.fetch(:days, 0) + 7 * partial_weeks
  end

  unless options[:days].nil?
    options[:days], partial_days = options[:days].divmod(1)
    options[:hours] = options.fetch(:hours, 0) + 24 * partial_days
  end

  d = to_date.advance(options)
  datetime_advanced_by_date = change(:year => d.year, :month => d.month, :day => d.day)
  seconds_to_advance =        options.fetch(:seconds, 0) +
    options.fetch(:minutes, 0) * 60 +
    options.fetch(:hours, 0) * 3600

  if seconds_to_advance.zero?
    datetime_advanced_by_date
  else
    datetime_advanced_by_date.since(seconds_to_advance)
  end
end

Использует Date для обеспечения точных вычислений Time для лет, месяцев и дней. Параметр options принимает хэш с любыми из этих ключей: :years, :months, :weeks, :days, :hours, :minutes, :seconds.

ago(seconds) Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/calculations.rb, line 89
def ago(seconds)
  since(-seconds)
end

Возвращает новый DateTime, представляющий время, прошедшее некоторое количество секунд назад. Не используйте этот метод в сочетании с x.months, используйте вместо этого months_ago!

at_beginning_of_day()
Псевдоним для: beginning_of_day
at_beginning_of_hour()
Псевдоним для: beginning_of_hour
at_beginning_of_minute()
Псевдоним для: beginning_of_minute
at_end_of_day()
Псевдоним для: end_of_day
at_end_of_hour()
Псевдоним для: end_of_hour
at_end_of_minute()
Псевдоним для: end_of_minute
at_midday()
Псевдоним для: middle_of_day
at_middle_of_day()
Псевдоним для: middle_of_day
at_midnight()
Псевдоним для: beginning_of_day
at_noon()
Псевдоним для: middle_of_day
beginning_of_day() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/calculations.rb, line 102
def beginning_of_day
  change(:hour => 0)
end

Возвращает новый DateTime, представляющий начало дня (0:00).

Также является псевдонимом для: midnight, at_midnight, at_beginning_of_day
beginning_of_hour() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/calculations.rb, line 126
def beginning_of_hour
  change(:min => 0)
end

Возвращает новый DateTime, представляющий начало часа (hh:00:00).

Также является псевдонимом для: at_beginning_of_hour
beginning_of_minute() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/calculations.rb, line 138
def beginning_of_minute
  change(:sec => 0)
end

Возвращает новый DateTime, представляющий начало минуты (hh:mm:00).

Также является псевдонимом для: at_beginning_of_minute
change(options) Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/calculations.rb, line 45
def change(options)
  ::DateTime.civil(
    options.fetch(:year, year),
    options.fetch(:month, month),
    options.fetch(:day, day),
    options.fetch(:hour, hour),
    options.fetch(:min, options[:hour] ? 0 : min),
    options.fetch(:sec, (options[:hour] || options[:min]) ? 0 : sec + sec_fraction),
    options.fetch(:offset, offset),
    options.fetch(:start, start)
  )
end

Возвращает новый DateTime, в котором один или несколько элементов были изменены в соответствии с параметром options. Параметры времени (:hour, :min, :sec) сбрасываются каскадно, поэтому, если передан только час, то минута и секунда устанавливаются в 0. Если переданы час и минута, то секунда устанавливается в 0. Параметр options принимает хэш с любыми из этих ключей: :year, :month, :day, :hour, :min, :sec, :offset, :start.

DateTime.new(2012, 8, 29, 22, 35, 0).change(day: 1)              # => DateTime.new(2012, 8, 1, 22, 35, 0)
DateTime.new(2012, 8, 29, 22, 35, 0).change(year: 1981, day: 1)  # => DateTime.new(1981, 8, 1, 22, 35, 0)
DateTime.new(2012, 8, 29, 22, 35, 0).change(year: 1981, hour: 0) # => DateTime.new(1981, 8, 29, 0, 0, 0)
default_inspect()
Псевдоним для: inspect
end_of_day() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/calculations.rb, line 120
def end_of_day
  change(:hour => 23, :min => 59, :sec => 59)
end

Возвращает новый DateTime, представляющий конец дня (23:59:59).

Также является псевдонимом для: at_end_of_day
end_of_hour() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/calculations.rb, line 132
def end_of_hour
  change(:min => 59, :sec => 59)
end

Возвращает новый DateTime, представляющий конец часа (hh:59:59).

Также является псевдонимом для: at_end_of_hour
end_of_minute() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/calculations.rb, line 144
def end_of_minute
  change(:sec => 59)
end

Возвращает новый DateTime, представляющий конец минуты (hh:mm:59).

Также является псевдонимом для: at_end_of_minute
formatted_offset(colon = true, alternate_utc_string = nil) Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/conversions.rb, line 47
def formatted_offset(colon = true, alternate_utc_string = nil)
  utc? && alternate_utc_string || ActiveSupport::TimeZone.seconds_to_utc_offset(utc_offset, colon)
end

datetime = DateTime.civil(2000, 1, 1, 0, 0, 0, Rational(-6, 24)) datetime.formatted_offset # => “-06:00” datetime.formatted_offset(false) # => “-0600”

getgm()
Псевдоним для: utc
getlocal(utc_offset = nil)
Псевдоним для: localtime
getutc()
Псевдоним для: utc
gmtime()
Псевдоним для: utc
in(seconds)
Псевдоним для: since
inspect()
Также псевдоним: default_inspect
Псевдоним для: readable_inspect
localtime(utc_offset = nil) Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/calculations.rb, line 150
def localtime(utc_offset = nil)
  utc = new_offset(0)

  Time.utc(
    utc.year, utc.month, utc.day,
    utc.hour, utc.min, utc.sec + utc.sec_fraction
  ).getlocal(utc_offset)
end

Возвращает экземпляр DateTime с текущим временем в часовом поясе системы.

Также псевдоним: getlocal
midday()
Псевдоним для: middle_of_day
middle_of_day() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/calculations.rb, line 110
def middle_of_day
  change(:hour => 12)
end

Возвращает новый объект DateTime, представляющий полдень (12:00).

Также псевдоним: midday, noon, at_midday, at_noon, at_middle_of_day
midnight()
Псевдоним для: beginning_of_day
noon()
Псевдоним для: middle_of_day
nsec() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/conversions.rb, line 90
def nsec
  (sec_fraction * 1_000_000_000).to_i
end

Возвращает дробную часть секунды в наносекундах.

readable_inspect() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/conversions.rb, line 52
def readable_inspect
  to_s(:rfc822)
end

Переопределяет метод inspect для получения удобочитаемого представления, например, «Пн, 21 фев 2005 14:30:00 +0000».

Также псевдоним: inspect
seconds_since_midnight() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/calculations.rb, line 14
def seconds_since_midnight
  sec + (min * 60) + (hour * 3600)
end

Секунды с момента полуночи: DateTime.now.seconds_since_midnight.

seconds_until_end_of_day() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/calculations.rb, line 23
def seconds_until_end_of_day
  end_of_day.to_i - to_i
end

Возвращает количество секунд до 23:59:59.

DateTime.new(2012, 8, 29,  0,  0,  0).seconds_until_end_of_day # => 86399
DateTime.new(2012, 8, 29, 12, 34, 56).seconds_until_end_of_day # => 41103
DateTime.new(2012, 8, 29, 23, 59, 59).seconds_until_end_of_day # => 0
since(seconds) Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/calculations.rb, line 96
def since(seconds)
  self + Rational(seconds.round, 86400)
end

Возвращает новый объект DateTime, представляющий время, которое прошло через заданное количество секунд от текущего момента. Не используйте этот метод в сочетании с x.months, используйте months_since вместо этого!

Также псевдоним: in
subsec() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/calculations.rb, line 30
def subsec
  sec_fraction
end

Возвращает дробную часть секунды в виде Rational

DateTime.new(2012, 8, 29, 0, 0, 0.5).subsec # => (1/2)
to_default_s(format = :default)
Псевдоним для: to_s
to_f() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/conversions.rb, line 75
def to_f
  seconds_since_unix_epoch.to_f + sec_fraction
end

Преобразует self в число с плавающей точкой, представляющее секунды, включая дробные микросекунды, с момента эпохи Unix.

to_formatted_s(format = :default) Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/conversions.rb, line 33
def to_formatted_s(format = :default)
  if formatter = ::Time::DATE_FORMATS[format]
    formatter.respond_to?(:call) ? formatter.call(self).to_s : strftime(formatter)
  else
    to_default_s
  end
end

Преобразует в строку с заданным форматом. См. Time::DATE_FORMATS для предопределенных форматов.

Этот метод является псевдонимом для to_s

Примеры

datetime = DateTime.civil(2007, 12, 4, 0, 0, 0, 0)   # => Tue, 04 Dec 2007 00:00:00 +0000

datetime.to_formatted_s(:db)            # => "2007-12-04 00:00:00"
datetime.to_s(:db)                      # => "2007-12-04 00:00:00"
datetime.to_s(:number)                  # => "20071204000000"
datetime.to_formatted_s(:short)         # => "04 Dec 00:00"
datetime.to_formatted_s(:long)          # => "December 04, 2007 00:00"
datetime.to_formatted_s(:long_ordinal)  # => "December 4th, 2007 00:00"
datetime.to_formatted_s(:rfc822)        # => "Tue, 04 Dec 2007 00:00:00 +0000"
datetime.to_formatted_s(:iso8601)       # => "2007-12-04T00:00:00+00:00"

Добавление собственных форматов дат и времени в #to_formatted_s

Форматы DateTime совместно используются с Time. Вы можете добавить свои собственные в хэш Time::DATE_FORMATS. Используйте имя формата в качестве ключа хэша и либо строку strftime, либо экземпляр Proc, который принимает время или дату и время в качестве аргумента.

# config/initializers/time_formats.rb
Time::DATE_FORMATS[:month_and_year] = '%B %Y'
Time::DATE_FORMATS[:short_ordinal] = lambda { |time| time.strftime("%B #{time.day.ordinalize}") }
Также псевдоним: to_s
to_i() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/conversions.rb, line 80
def to_i
  seconds_since_unix_epoch.to_i
end

Преобразует self в целое число секунд с момента эпохи Unix.

to_s(format = :default)
Также псевдоним: to_default_s
Псевдоним для: to_formatted_s
to_time() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/compatibility.rb, line 13
def to_time
  preserve_timezone ? getlocal(utc_offset) : getlocal
end

Возвращает экземпляр `Time` с тем же часовым поясом, что и self, или экземпляр `Time`, представляющий то же время в локальном часовом поясе системы в зависимости от настроек ActiveSupport.to_time_preserves_timezone

usec() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/conversions.rb, line 85
def usec
  (sec_fraction * 1_000_000).to_i
end

Возвращает дробную часть секунды в микросекундах.

utc() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/calculations.rb, line 164
def utc
  new_offset(0)
end

Возвращает экземпляр DateTime с текущим временем в часовом поясе UTC.

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 UTC
Также псевдоним: getgm, getutc, gmtime
utc?() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/calculations.rb, line 172
def utc?
  offset == 0
end

Возвращает значение true, если offset == 0

utc_offset() Показать исходный код
# File activesupport/lib/active_support/core_ext/date_time/calculations.rb, line 177
def utc_offset
  (offset * 86400).to_i
end

Возвращает значение смещения в секундах.

© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API