Rails 3:如何在特定时区获取今天的日期?

Mis*_*hko 68 timezone ruby-on-rails date ruby-on-rails-3

为了得到今天的约会,我做了:

Date.today    # => Fri, 20 May 2011
Run Code Online (Sandbox Code Playgroud)

我想在特定的时区得到今天的日期'Melbourne'.

我的设置如下application.rb:

config.time_zone = 'Melbourne'
Run Code Online (Sandbox Code Playgroud)

我设定:

Time.zone = 'Melbourne'
Run Code Online (Sandbox Code Playgroud)

在每个动作之前我的应用程序控制器

但是,它没有帮助(我想因为这些设置只影响存储在数据库中的日期).

我怎么能得到今天的约会'Melbourne'

Dyl*_*kow 63

Date对象不一定有时区,但Time对象有.您可以尝试将其作为a Time,然后转换回Date:

Time.now.to_date
# => Thu, 19 May 2011 
Time.now.in_time_zone('Melbourne').to_date
# => Fri, 20 May 2011 
Run Code Online (Sandbox Code Playgroud)


Rya*_*igg 59

你应该能够这样做:Time.current.这将显示墨尔本的当前时间,如果这Time.zone是设置的.

  • `Time.current.to_date`甚至更好! (22认同)
  • `Time.zone.now.to_date`是最优雅的!谢谢! (6认同)
  • 对于任何Date对象更好:Date.today.to_time_in_current_zone (5认同)
  • @SlobodanKovacevic Date.today.to_time_in_current_zone返回Time对象而不是Date对象. (2认同)

Jos*_*osh 32

Date.current

Date.current 可能是最明确和简洁的方式,并在Rails 3中添加.

$ Date.current
#=> Sat, 14 Jul 2018
Run Code Online (Sandbox Code Playgroud)

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


Sli*_*k23 14

它似乎Time.zone.today也有效.


Tyl*_*ick 12

如果你想在某个指定时区"今天"而不必改变Time.zone,我会做一些像fl00r和Dylan Markow建议:

Time.now.in_time_zone('Melbourne').to_date
Run Code Online (Sandbox Code Playgroud)

或这个:

Time.find_zone!('Melbourne').today
Run Code Online (Sandbox Code Playgroud)

我写了一个小帮手方法Date.today_in_zone,让Date时区的"今天" 变得更加容易:

 # 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
Run Code Online (Sandbox Code Playgroud)

我认为它看起来比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
Run Code Online (Sandbox Code Playgroud)


fl0*_*00r 6

DateTime

DateTime.now.in_time_zone 'Melbourne'
Run Code Online (Sandbox Code Playgroud)