【问题标题】:Rails not correctly converting to UTC timezone when doing date compare在进行日期比较时,Rails 未正确转换为 UTC 时区
【发布时间】:2014-10-05 17:11:10
【问题描述】:

全部,

我有一个查询,它正在查找自某个日期以来的对话,以允许移动应用查看自上次检查以来是否有任何更新的对话。我发现rails在进行查询之前没有将我的“since_date”转换为UTC,我得到的结果不正确。 (这来自我的功能测试)

生成的查询是

SELECT "conversations".* FROM "conversations" INNER JOIN "conversation_joins" ON "conversations"."id" = "conversation_joins"."conversation_id" WHERE "conversation_joins"."user_id" = 980190962 AND (last_message_at > '2014-10-05 11:46:22 -0500')

结果是

[#<Conversation id: 980190962, last_message_id: 298486374, user_ids: nil, last_message_at: "2014-10-05 15:48:22", message_count: 2, created_at: "2014-10-05 16:48:22", updated_at: "2014-10-05 16:48:22", key: "298486374,980190962">]

请注意,返回的对话的 UTC last_message_at 日期/时间为“2014-10-05 15:48:22”,查询正在寻找“2014-10-05 11:46:22 -0500”,即“ 2014-10-05 16:46:22" 表示不应退回。为了确认这一点,我做了同样的事情,向前看 X 小时,一旦我提前 6 小时到达,对话就没有返回,这与我的时区推测相符。

在创建查询之前,我是否需要在控制器中将日期/时间显式更改为 UTC,或者由于时区已经包含在内,rails 是否应该为我执行此操作?我的 Rails 版本是“3.2.13”

【问题讨论】:

    标签: ruby-on-rails date datetime


    【解决方案1】:

    查询的代码必须先将日期转换为 UTC,然后再将它们发送到 where 调用。 ActiveRecord 不转换查询参数。

    【讨论】:

    • 谢谢毛里西奥。这正是我所猜测的。
    猜你喜欢
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 2021-03-12
    • 1970-01-01
    相关资源
    最近更新 更多