Lan*_*ard 1 timezone ruby-on-rails
在一个区域中保存时间并在另一个区域中查看它们的标准是什么?我有这个environment.rb:
config.time_zone = 'UTC'
Run Code Online (Sandbox Code Playgroud)
但我想渲染它,并在其时区中执行诸如"今天创建的所有帖子"之类的查询,其中beginning_of_day以时区而不是UTC返回当天的开头.rails是否已在后台处理转换?
这是问题所在:
@now = Time.now
=> Wed Jan 26 09:50:04 -0600 2011
User.count(:conditions => ["created_at > ?", @now])
SQL (1.3ms) SELECT count(*) AS count_all FROM `users` WHERE (created_at > '2011-01-26 09:50:04')
=> 1
@now = Time.now.utc
=> Wed Jan 26 15:50:10 UTC 2011
User.count(:conditions => ["created_at > ?", @now])
SQL (1.2ms) SELECT count(*) AS count_all FROM `users` WHERE (created_at > '2011-01-26 15:50:10')
=> 0
Run Code Online (Sandbox Code Playgroud)
ActiveSupport具有内置方法,可在任何时区显示时间值.通常,您time_zone需要在User模型中添加一列,并将其设置为用户的首选区域.
@user.update_attribute(:time_zone,'Eastern Time (US & Canada)')
Run Code Online (Sandbox Code Playgroud)
然后在显示时间值时,将区域设置为用户的区域.
Time.zone = @user.time_zone
Time.zone.now # shows current time according to @user.time_zone
Run Code Online (Sandbox Code Playgroud)
一种方法是设置它,ApplicationController以便为每个请求完成:
class ApplicationController < ActionController::Base
before_filter :set_time_zone
def set_time_zone
Time.zone = current_user.time_zone if current_user
end
end
Run Code Online (Sandbox Code Playgroud)
注意:请参阅ActiveSupport :: TimeWithZone下的API
| 归档时间: |
|
| 查看次数: |
2183 次 |
| 最近记录: |