Pour obtenir la date d'aujourd'hui, je fais:
Date.today # => Fri, 20 May 2011
J'aimerais obtenir la date d'aujourd'hui dans un fuseau horaire spécifique, par exemple 'Melbourne'
.
J'ai le paramètre suivant dans mon application.rb
:
config.time_zone = 'Melbourne'
et je mets:
Time.zone = 'Melbourne'
dans mon contrôleur d'application avant chaque action.
Cependant, cela n'aide pas (je suppose que ces paramètres n'affectent que les dates stockées dans la base de données).
Comment pourrais-je obtenir la date d'aujourd'hui en 'Melbourne'
?
Vous devriez pouvoir faire ceci: Time.current
. Cela afficherait l'heure actuelle à Melbourne si c'est ce que Time.zone
est réglé sur.
Les objets Date
n'ont pas nécessairement de fuseau horaire, mais les objets Time
en ont. Vous pouvez l'essayer en tant que Time
, puis reconvertir en Date
:
Time.now.to_date
# => Thu, 19 May 2011
Time.now.in_time_zone('Melbourne').to_date
# => Fri, 20 May 2011
Date.current
Date.current
est probablement le moyen le plus clair et le plus succinct, et a été ajouté dans Rails 3.
$ Date.current
#=> Sat, 14 Jul 2018
Il semble Time.zone.today
fonctionne également.
Si vous voulez obtenir "aujourd'hui" dans un fuseau horaire spécifié sans avoir à changer Time.zone
, Je ferais quelque chose comme fl00r et Dylan Markow a suggéré:
Time.now.in_time_zone('Melbourne').to_date
ou ca:
Time.find_zone!('Melbourne').today
J'ai écrit une petite méthode d'aide Date.today_in_zone
Qui rend encore plus facile l'obtention d'un "aujourd'hui" Date
pour un fuseau horaire:
# Defaults to using Time.zone
> Date.today_in_zone
=> Fri, 26 Oct 2012
# Or specify a zone to use
> Date.today_in_zone('Melbourne')
=> Sat, 27 Oct 2012
Je pense que ça se lit un peu mieux que Time.find_zone!('Melbourne').today
...
Pour l'utiliser, il suffit de le jeter 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
utiliser la classe DateTime
DateTime.now.in_time_zone 'Melbourne'
Pour les noms de fuseau horaire valides, consultez: http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html
Ruby-1.9.2-p0 :004 > Time.now
=> 2011-05-19 15:46:45 +0100
Ruby-1.9.2-p0 :006 > Time.now.in_time_zone('Melbourne')
=> Fri, 20 May 2011 00:47:00 EST +10:00
Ruby-1.9.2-p0 :007 > Time.now.in_time_zone('Melbourne').to_date
=> Fri, 20 May 2011
Dans Rails 3, vous pouvez simplement le faire en appelant to_time_in_current_zone sur un objet Date.
Date.today.to_time_in_current_zone