web-dev-qa-db-ja.com

Rails 3:特定のタイムゾーンで今日の日付を取得するには?

今日の日付を取得するには:

Date.today    # => Fri, 20 May 2011

特定のタイムゾーンで今日の日付を取得したいのですが、'Melbourne'と言います。

application.rbに次の設定があります:

config.time_zone = 'Melbourne'

そして私は設定しました:

Time.zone = 'Melbourne'

各アクションの前にアプリケーションコントローラーで。

しかし、それは役に立ちません(これらの設定はデータベースに保存されている日付にのみ影響するためだと思います)。

'Melbourne'で今日の日付を取得するにはどうすればよいですか?

66
Misha Moroshko

これができるはずです:Time.current。メルボルンの現在の時刻が表示されますTime.zone に設定されています。

58
Ryan Bigg

Dateオブジェクトには必ずしもタイムゾーンがありませんが、Timeオブジェクトにはあります。 Timeとして試してから、Dateに変換して戻すことができます。

Time.now.to_date
# => Thu, 19 May 2011 
Time.now.in_time_zone('Melbourne').to_date
# => Fri, 20 May 2011 
62
Dylan Markow

Date.current

Date.current はおそらく最も明確で簡潔な方法であり、Rails 3。

$ Date.current
#=> Sat, 14 Jul 2018

http://apidock.com/Rails/v3.2.13/Date/current/class

31
Josh

そうみたいです Time.zone.todayも機能します。

14
Slick23

_Time.zone_を変更せずに、指定されたタイムゾーンで「今日」を取得したい場合は、fl00rやDylan Markowのようなことをします。

_Time.now.in_time_zone('Melbourne').to_date
_

またはこれ:

_Time.find_zone!('Melbourne').today
_

タイムゾーンの "今日" Dateを取得するのをさらに簡単にする少しのヘルパーメソッド_Date.today_in_zone_を作成しました。

_ # 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
_

Time.find_zone!('Melbourne').today...より少し読みやすいと思います...

これを使用するには、これを_'lib/date_extensions.rb'_や_require 'date_extensions'_などのファイルにスローします。

_class Date
  def self.today_in_zone(zone = ::Time.zone)
    ::Time.find_zone!(zone).today
  end
end
_
12
Tyler Rick

DateTimeクラスを使用

DateTime.now.in_time_zone 'Melbourne'
6
fl00r

有効なタイムゾーン名については、チェックアウト: http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

2
mmattke
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
2
Max Williams

Rails 3では、Dateオブジェクトでto_time_in_current_zoneを呼び出すだけでこれを実行できます。

Date.today.to_time_in_current_zone
1