Подтвердить что ты не робот

Является ли Time.zone.now.to_date эквивалентом Date.today?

Является ли Time.zone.now.to_date эквивалентным Date.today?

Другой способ: Time.zone.now.to_date == Date.today всегда true?

Если нет, то какой лучший способ получить объект Date, соответствующий "сейчас" в часовом поясе приложения?

4b9b3361

Ответ 1

Они не всегда одинаковы. Time.zone.now.to_date будет использовать часовой пояс приложений, а Date.today будет использовать часовой пояс серверов. Поэтому, если они лежат на разных датах, тогда они будут разными. Пример из моей консоли:

ruby-1.9.2-p290 :036 > Time.zone = "Sydney"
 => "Sydney" 
ruby-1.9.2-p290 :037 > Time.zone.now.to_date
 => Wed, 21 Sep 2011 
ruby-1.9.2-p290 :038 > Date.today
 => Tue, 20 Sep 2011 

Ответ 2

Еще проще: Time.zone.today

Я также написал небольшой вспомогательный метод Date.today_in_zone, который позволяет очень легко получить "сегодня" Date для определенного часового пояса без изменения Time.zone:

 # Defaults to using Time.zone
 > Date.today_in_zone
=> Fri, 26 Oct 2012

 # Or specify a zone to use
 > Date.today_in_zone('Sydney')
=> Sat, 27 Oct 2012

Чтобы использовать его, просто выбросьте его в файл, например 'lib/date_extensions.rb' и require 'date_extensions'.

class Date
  def self.today_in_zone(zone = ::Time.zone)
    ::Time.find_zone!(zone).today
  end
end

Ответ 3

Я думаю, что лучший способ - узнать текущее время через:

Time.current

Это автоматически проверяет, есть ли у вас часовой пояс, тогда он вызовет Time.zone.now, но если вы его не вызовете просто Time.now.

Кроме того, не забудьте установить часовой пояс в application.rb