Time.now.midnight对时区的敏感性

时间:2011-03-28 21:29:54

标签: ruby-on-rails ruby-on-rails-3

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

  • 当发生“事件”时,该网站会查找在Time.now.midnight创建的记录。
  • 如果找不到此类记录,则会创建一个新记录,created_at设置为Time.now.midnight

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

如何解决这个问题,以便所有分析记录,无论触发创建的用户的时区如何,都会被固定一次?

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

1 个答案:

答案 0 :(得分:2)

根据客户端时区,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"