我刚刚使用表单创建了一个新对象,其updated_at和created_at值为
created_at: "2013-04-25 03:22:19", updated_at: "2013-04-25 03:22:19",
然而,这比我(PST)提前约7个小时 .
Time.now.to_s => "2013-04-24 20:23:12 -0700"
如何确保时区与用户创建时区的位置一致?
您的 created_at 和 updated_at 值是从服务器写入数据库的,因此它们将始终位于您的服务器_773463的时区 . 当服务器处理表单数据并保存到您的数据库时,它不知道浏览器的时区 .
created_at
updated_at
您可以使用 config.time_zone 设置Rails时区,如@lulalala建议的那样 .
config.time_zone
听起来您有兴趣在原生时区向用户显示时间 . 你有两个选择:
请求您的用户注册时区(或指定默认区域并允许用户编辑)
使用javascript检测时区并向服务器报告(http://josephscott.org/archives/2009/08/detecting-client-side-time-zone-offset-via-javascript/) - 不保证是正确的
将时区保存为用户属性后,您可以向用户显示您的时间,如下所示:
Model.created_at.in_time_zone(@current_user.time_zone)
我使用命令 > Time.now.to_s 检查 irb 时区,时间是正确的,但应用程序将错误保存了3个小时 . 所以..
> Time.now.to_s
irb
我的解决方案是将 config.time_zone = "Santiago" 添加到 config/environments/development.rb 文件中 . 时区列表是here,我的条目是
config.time_zone = "Santiago"
config/environments/development.rb
"Santiago" => "America/Santiago"
2 回答
您的
created_at
和updated_at
值是从服务器写入数据库的,因此它们将始终位于您的服务器_773463的时区 . 当服务器处理表单数据并保存到您的数据库时,它不知道浏览器的时区 .您可以使用
config.time_zone
设置Rails时区,如@lulalala建议的那样 .听起来您有兴趣在原生时区向用户显示时间 . 你有两个选择:
请求您的用户注册时区(或指定默认区域并允许用户编辑)
使用javascript检测时区并向服务器报告(http://josephscott.org/archives/2009/08/detecting-client-side-time-zone-offset-via-javascript/) - 不保证是正确的
将时区保存为用户属性后,您可以向用户显示您的时间,如下所示:
我使用命令
> Time.now.to_s
检查irb
时区,时间是正确的,但应用程序将错误保存了3个小时 . 所以..我的解决方案是将
config.time_zone = "Santiago"
添加到config/environments/development.rb
文件中 . 时区列表是here,我的条目是