Time.zone.now.to_date эквивалентно Date.today? - PullRequest
31 голосов
/ 21 декабря 2009

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

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

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

Ответы [ 4 ]

41 голосов
/ 20 сентября 2011

Они не всегда одинаковы. 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 
11 голосов
/ 26 октября 2012

Еще проще: 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
2 голосов
/ 10 декабря 2014

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

Time.current

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

Также не забудьте установить часовой пояс в приложении. Rb

1 голос
/ 07 июня 2017
# system timezone
Time.now.to_date == Date.today

# application timezone
Time.zone.now.to_date == Time.current.to_date == Time.zone.today == Date.current

http://edgeapi.rubyonrails.org/classes/Time.html#method-c-current http://edgeapi.rubyonrails.org/classes/Date.html#method-c-current

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...