【问题标题】:created_at in where statement and timezonecreated_at 在 where 语句和时区
【发布时间】:2012-08-28 12:42:12
【问题描述】:

我正在尝试在我的模型中检索当天的所有条目:

where('date(created_at) = date(?)', Date.today)

但是,由于时区(我的本地时间是 UTC+2),我没有预期的结果。例如,如果在午夜后一分钟创建了一个条目,则在数据库中,它将存储在 22:01(因此不是“Date.today”)。

有没有办法做到这一点?

编辑:

作为网站管理员,我想在当地时间“今天”显示条目数(仅用于统计目的!)。所以我想将时间戳存储在 utc 中,但在此请求期间将它们转换为我的本地时区!

【问题讨论】:

  • 使用 before_filter 设置正确的时区?
  • 是的:before_filter do Time.zone = ActiveSupport::TimeZone.new('Paris') end
  • 尝试TimeZone.new('Paris') 然后Time.zone.now 获取更改。

标签: mysql ruby-on-rails date timezone


【解决方案1】:

您可以通过多种方式设置正确的时区。这个答案中描述了一个:

https://stackoverflow.com/a/6118837/567126

将以下内容添加到 application.rb 作品

config.time_zone = '东部时间(美国和加拿大)'

【讨论】:

【解决方案2】:
where('date(created_at) = ?', Time.zone.now.to_date)

【讨论】:

    【解决方案3】:

    数据库中的时间应存储为 UTC。这样,当您创建一个全球网站时,您可以为每个用户提供自己的时区。

    显示用户本地时区的时间是 UI(视图)的职责。

    对于您的 where,您应该使用 Time.now.utc 这样,您将使用通用 UTC 搜索数据库。

    【讨论】:

      猜你喜欢
      • 2017-04-05
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      相关资源
      最近更新 更多