2009-12-20 2 views
28

Est-ce que Time.zone.now.to_date équivaut à Date.today? Une autre façon de le mettre: sera Time.zone.now.to_date == Date.today toujours true? Si ce n'est pas le cas, quel est le meilleur moyen d'obtenir un objet Date correspondant à "maintenant" dans le fuseau horaire de l'application?Time.zone.now.to_date est-il équivalent à Date.today?

+0

Ceci est une excellente référence pour les dates et heures pour éviter fuseau horaire gotchas: http: //danilenko.org/2012/7/7/6/rails_timezones/ – Matt

+0

La manière correcte est la suivante: http://stackoverflow.com/a/27397193/115363 –

Répondre

39

Ils ne sont pas toujours les mêmes. Time.zone.now.to_date utilisera le fuseau horaire des applications, tandis que Date.today utilisera le fuseau horaire des serveurs. Donc, si les deux mentent à des dates différentes, ils seront différents. Un exemple de la console:

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 
+0

Méfiez-vous de ce problème: http://stackoverflow.com/a/27397193/115363 –

9

Encore plus facile: Time.zone.today

J'ai aussi écrit une petite méthode d'aide Date.today_in_zone qui le rend vraiment facile d'obtenir un « aujourd'hui » Date pour une zone de temps spécifique sans avoir à changementTime.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 

Pour l'utiliser, il suffit de jeter cela dans un fichier comme 'lib/date_extensions.rb' et require 'date_extensions'.

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

Je pense que la meilleure façon est d'apprendre l'heure actuelle par:

Time.current 

Cela vérifie automatiquement si vous avez fuseau horaire fixé il appellera Time.zone.now, mais si vous n'avez pas, il appellera juste Time.now.

Aussi, ne pas oublier de définir votre fuseau horaire dans application.rb