Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails似乎在错误的时区为created_at、updated_at值创建对象_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails似乎在错误的时区为created_at、updated_at值创建对象

Ruby on rails Rails似乎在错误的时区为created_at、updated_at值创建对象,ruby-on-rails,Ruby On Rails,我刚刚用一个表单创建了一个新对象,它的更新值和created值是 created_at: "2013-04-25 03:22:19", updated_at: "2013-04-25 03:22:19", 然而,这比我现在的位置(PST)提前了约7个小时 如何确保时区与用户从何处创建的时区一致?您的在处创建的值和在处更新的值将从服务器写入数据库,因此它们将始终位于服务器或应用程序的时区中。当服务器处理表单数据并保存到数据库时,它不知道浏览器的时区 您可以使用@lulalala建议的config

我刚刚用一个表单创建了一个新对象,它的更新值和created值是

created_at: "2013-04-25 03:22:19", updated_at: "2013-04-25 03:22:19",
然而,这比我现在的位置(PST)提前了约7个小时


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

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

您可以使用@lulalala建议的
config.time\u zone
设置Rails时区

听起来您对在用户的本地时区向用户显示时间很感兴趣。对此,您有两个选项:

  • 在注册时向用户询问时区(或指定默认时区并允许用户编辑)

  • 使用javascript检测时区并向服务器报告()-不保证正确

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

Model.created_at.in_time_zone(@current_user.time_zone)

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

我的解决方案是将
config.time\u zone=“Santiago”
添加到
config/environments/development.rb
文件中。时区列表是,我的条目是

"Santiago" => "America/Santiago"

您是否设置了
config.time\u zone
设置?请查看
use\u zone
——如果您尚未在config/application.rb文件中设置时区,运行
rake time:zones:all
,查看您可以将其设置为的有效时区列表。提示:在config/application.rbIt中检查config.time\u zone注释始终以UTC格式存储数据是一种很好的做法,听起来您的应用程序已经在这样做了。如果您希望在用户自己的时区中向用户显示时间,请存储他的时区并在表示层中处理转换。如果我将时区设置为我自己的时区,则不会为每个用户自定义,对吗?我不知道如何执行mchail的建议。如果您只为一个时区运行应用程序,您还可以在
application.rb
中为所有环境设置它,如
config.time\u zone='Europe/Berlin'
"Santiago" => "America/Santiago"