Um das heutige Datum zu bekommen, mache ich:
Date.today # => Fri, 20 May 2011
Ich möchte das heutige Datum beispielsweise in einer bestimmten Zeitzone erhalten 'Melbourne'
.
Ich habe die folgende Einstellung in meinem application.rb
:
config.time_zone = 'Melbourne'
und ich setze:
Time.zone = 'Melbourne'
in meinem Anwendungscontroller vor jeder Aktion.
Es hilft jedoch nicht (ich denke, da diese Einstellungen nur Daten betreffen, die in der Datenbank gespeichert sind).
Wie könnte ich das heutige Date bekommen 'Melbourne'
?
ruby-on-rails
ruby-on-rails-3
date
timezone
Mischa Moroshko
quelle
quelle
Time.zone.now.to_date
ist das eleganteste! Vielen Dank!Time.current.to_date
ist noch besser!Time.current.beginning_of_day + 18.hours
wird auch funktionieren :)Date
Objekte haben nicht unbedingt Zeitzonen,Time
Objekte jedoch. Sie können es als versuchenTime
und dann wieder konvertieren zuDate
:Time.now.to_date # => Thu, 19 May 2011 Time.now.in_time_zone('Melbourne').to_date # => Fri, 20 May 2011
quelle
Date.current
Date.current
ist wahrscheinlich der klarste und prägnanteste Weg und wurde in Rails 3 hinzugefügt.$ Date.current #=> Sat, 14 Jul 2018
http://apidock.com/rails/v3.2.13/Date/current/class
quelle
Wenn Sie "heute" in einer bestimmten Zeitzone erhalten möchten, ohne sich ändern zu müssen
Time.zone
, würde ich so etwas wie fl00r tun und Dylan Markow schlug vor:Time.now.in_time_zone('Melbourne').to_date
oder dieses:
Time.find_zone!('Melbourne').today
Ich habe eine kleine Hilfsmethode geschrieben
Date.today_in_zone
, die esDate
noch einfacher macht, ein "Heute" für eine Zeitzone zu erhalten:# 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
Ich denke, es liest sich ein bisschen schöner als
Time.find_zone!('Melbourne').today
...Um es zu verwenden, werfen Sie dies einfach in eine Datei wie
'lib/date_extensions.rb'
undrequire 'date_extensions'
.class Date def self.today_in_zone(zone = ::Time.zone) ::Time.find_zone!(zone).today end end
quelle
Es scheint
Time.zone.today
auch zu funktionieren.quelle
benutze
DateTime
KlasseDateTime.now.in_time_zone 'Melbourne'
quelle
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
quelle
Informationen zu gültigen Zeitzonennamen finden Sie unter: http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html
quelle
In Rails 3 können Sie dies einfach tun, indem Sie to_time_in_current_zone für ein Date-Objekt aufrufen.
quelle
Date.today
möglicherweise das Datum von gestern oder morgen zurückgegeben. Das Anrufento_time_in_current_zone
wird dann zu einer Zeit in der Rails-Zone, aber zu einer Zeit, die gestern oder morgen sein kann. Dies ist nützlich, wenn Sie ein Datum haben, von dem bekannt ist, dass es in der richtigen Zeitzone liegtTime.zone.today
, aber irreführend istDate.today
.