Rails似乎是在created_at,updated_at值的错误时区创建对象

时间:2013-04-25 03:24:41

标签: ruby-on-rails

我刚刚使用表单创建了一个新对象,其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" 

如何确保时区与用户从何处创建时区一致?

2 个答案:

答案 0 :(得分:14)

您的created_atupdated_at值会从您的服务器写入数据库,因此它们将始终位于您的服务器或应用程序的时区。当服务器处理表单数据并保存到您的数据库时,它不知道浏览器的时区。

您可以使用config.time_zone设置Rails时区,如@lulalala建议的那样。

听起来您有兴趣在原生时区向用户显示时间。您有两种选择:

将时区保存为用户属性后,您可以向用户显示您的时间,如下所示:

Model.created_at.in_time_zone(@current_user.time_zone)

答案 1 :(得分:2)

我使用命令irb检查> Time.now.to_s时区,时间是正确的,但应用程序将错误保存了3个小时。所以..

我的解决方案是将config.time_zone = "Santiago"添加到config/environments/development.rb文件中。时区列表为here,我的条目为

"Santiago" => "America/Santiago"