是Time.zone.now.to_date
相當於Date.today
?Time.zone.now.to_date是否等同於Date.today?
另一種說法:Time.zone.now.to_date == Date.today
總會是true
?
如果不是,在應用程序時區中獲取與「now」對應的Date對象的最佳方式是什麼?
是Time.zone.now.to_date
相當於Date.today
?Time.zone.now.to_date是否等同於Date.today?
另一種說法:Time.zone.now.to_date == Date.today
總會是true
?
如果不是,在應用程序時區中獲取與「now」對應的Date對象的最佳方式是什麼?
它們並不總是相同的。 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
請注意這個問題:http://stackoverflow.com/a/27397193/115363 – 2016-03-25 15:34:43
即使簡單: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
我認爲最好的辦法就是通過學習當前時間:
Time.current
這會自動檢查是否已設置時區,然後它會調用Time.zone.now,但如果你沒有它只會調用Time.now。
此外,不要忘記設置時區在application.rb中
# 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
這是日期和時間,以避免時區陷阱有很大的參考:HTTP: //danilenko.org/2012/7/6/rails_timezones/ – Matt 2013-01-09 21:39:59
正確的方法是這樣的:http://stackoverflow.com/a/27397193/115363 – 2016-03-25 15:34:48