【问题标题】:ActiveRecord query on dates in user's time zoneActiveRecord 查询用户时区的日期
【发布时间】:2017-03-26 01:21:12
【问题描述】:

我在相对于用户的同一日期查询对象(即,如果在用户的时区是 2016 年 11 月 11 日,他们应该会在他们的时区看到发生在 11 月 11 日的事件)。

我的数据库以 UTC 存储事件日期时间(日期时间类型)。当我尝试时:

Event.where(DATE(datetime) = ?", Time.zone.today)

我希望它会拉取日期时间与当前用户的时区在同一日期的事件(通过Time.use_zonearound_action 中设置)。我在 application.rb 中有这个设置:

config.active_record.time_zone_aware_types = [:datetime, :time]

但是,存储在第二天 UTC 中的事件不会被返回。例如,山区时间 11 月 11 日晚上 10 点的事件存储在 UTC 时间 11 月 12 日上午 5 点。它仍应在 11 月 11 日返回给 Mountain Time 用户。

如何查询数据库以获取当前用户日期的事件?非常感谢!

【问题讨论】:

    标签: ruby-on-rails database timezone rails-activerecord


    【解决方案1】:

    感谢这个问题,我找到了答案:

    Getting date with timezone offset in postgres

    我基本上需要将日期时间转换为UTC首先,然后转换为用户时区。

    Event.where("DATE(datetime AT TIME ZONE 'UTC' AT TIME ZONE ?) = ?", Time.now.in_time_zone(current_user.time_zone).strftime("%Z"), Time.zone.today)

    【讨论】:

    • 如果我想根据时区获取用户日期和时间,我该怎么做?使用您的示例,我希望再次在 11/11 10PM 进行查询。我将 Time.zone.today 更改为 Time.zone.now 以获取当前日期时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多