ruby-on-rails – Time.now.midnight对时区的敏感性

我有一些日常分析风格的记录可以跟踪我网站上的使用情况,它们的工作方式如下:

>发生’事件’时,站点将查找在Time.now.midnight创建的记录.
>如果找不到这样的记录,则创建一个新记录,并将created_at设置为Time.now.midnight.

这是问题 – 根据客户的时区,Time.now.midnight的记录会有所不同吗?如果是这样,假设上述非常简单的系统会崩溃,我是否正确?

我如何修复它,以便所有分析记录,无论触发创建的用户的时区如何,都会被固定一次?

注意:我认为在这种情况下将created_at字段设置为Date而不是Datetime可能会更好.让我们假设我们遇到了这个问题的日期时间.

最佳答案 Time.now不会根据客户端时区进行不同的记录.

Time.now使用系统时区(也称为服务器)返回新时间

要使用客户端特定的时区,您必须让用户选择他们的区域并使用Time.current或Time.zone.now(它们执行相同的操作)

created_at通常固定为UTC,所以你不应该有任何问题.
(要更改此项,您需要更改Rails.root / config / application.rb)

config.time_zone = "whatever you want the ActiveRecord default to be"
点赞