Ответ 1
Рельсы
Для объекта даты вы можете использовать:
Date.yesterday
Или объект времени:
1.day.ago
Рубин
Или за пределами рельсов:
Date.today.prev_day
Как я могу получить вчерашнюю дату?
может быть:
@get_time_now = Time.now.strftime('%m/%d/%Y') / 86400
или
@get_time_now = Time.now.strftime('%m/%d/%Y') - 1.day
или
@get_time_now = Time.now. / 86400
86400 = 1 день, правильно? (60 * 60 * 24)
Для объекта даты вы можете использовать:
Date.yesterday
Или объект времени:
1.day.ago
Или за пределами рельсов:
Date.today.prev_day
Попробовав 1.day.ago
и варианты на нем:
irb(main):005:0> 1.day.ago
NoMethodError: undefined method `day' for 1:Fixnum
если найдено, что Date.today.prev_day
работает для меня:
irb(main):016:0> Date.today.prev_day
=> #<Date: 2013-04-09 ((2456392j,0s,0n),+0s,2299161j)>
Time.now - (3600 * 24) # or Time.now - 86400
или
require 'date'
Date.today.prev_day
Ruby 2.1.2 Исходное время
Ответ:
Time.at(Time.now.to_i - 86400)
Доказательство:
2.1.2 :016 > Time.now
=> 2014-07-01 13:36:24 -0400
2.1.2 :017 > Time.now.to_i
=> 1404236192
2.1.2 :018 > Time.now.to_i - 86400
=> 1404149804
2.1.2 :019 > Time.at(Time.now.to_i - 86400)
=> 2014-06-30 13:36:53 -0400
Один день секунды.
86400 = 1 день (60 * 60 * 24)
Используйте Date.today - 1.days.
Date.yesterday зависит от текущего времени и вашего смещения от GMT
1.9.3-p125 :100 > Date.today
=> Wed, 29 Feb 2012
1.9.3-p125 :101 > Date.yesterday
=> Wed, 29 Feb 2012
1.9.3-p125 :102 > Date.today - 1.days
=> Tue, 28 Feb 2012
использовать DateTime.now - 1
1.9.3p194 :040 > DateTime.now
=> Mon, 18 Nov 2013 17:58:45 +0530
1.9.3p194 :041 > DateTime.now - 1
=> Sun, 17 Nov 2013 17:58:49 +0530
или DateTime.yesterday
1.9.3p194 :042 > DateTime.yesterday
=> Sun, 17 Nov 2013
или мы можем использовать метод rails
advance
для Time
и DateTime
1.9.3p194 :043 > Time.now.advance(days: -1)
=> 2013-11-17 17:59:36 +0530
1.9.3p194 :044 > DateTime.now.advance(days: -1)
=> Sun, 17 Nov 2013 17:59:49 +0530
advance
также предоставляет следующие параметры :years, :months, :weeks, :days, :hours, :minutes, :seconds
Вы можете просто вычесть 86400 из объекта Time
, чтобы получить за день до этого. Если вы используете Rails или включили ActiveSupport, вы можете заменить 86400 на 1.days
.
Если вы используете объект Date
, а не объект Time
, просто вычтите из него 1.
Чтобы проверить, есть ли одна дата/время до/после другого, просто сравните два объекта, как вы делали бы для чисел:
DateTime.parse("2009-05-17T22:38:42-07:00") < DateTime.parse("2009-05-16T22:38:42-07:00")
# => false