Time.zone.now.to_date是否相当于Date.today?

Tom*_*man 32 ruby ruby-on-rails

Time.zone.now.to_date相当于Date.today

另一种说法:Time.zone.now.to_date == Date.today永远如此true

如果没有,那么在应用程序时区中获取与"now"相对应的Date对象的最佳方法是什么?

Nad*_*leh 41

它们并不总是一样的.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 
Run Code Online (Sandbox Code Playgroud)


Tyl*_*ick 12

更简单: 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
Run Code Online (Sandbox Code Playgroud)

要使用它,只需将其放在像'lib/date_extensions.rb'和的文件中require 'date_extensions'.

class Date
  def self.today_in_zone(zone = ::Time.zone)
    ::Time.find_zone!(zone).today
  end
end
Run Code Online (Sandbox Code Playgroud)