首页 > 解决方案 > 将 DateTime 属性与 DateTime.now 进行比较会产生意想不到的结果

问题描述

我在将 Active Record DateTime 属性值与 DateTime.now 进行比较时遇到问题。我期待和得到的结果是不同的。

我需要的结果

time_now = DateTime.now #Thu, 23 Jul 2020 13:03:26 +0530
@movies = Movie.where('show_time > ?', time_now)

上面的代码预计会给出结果:Movies which starts afterThu, 23 Jul 2020 13:03:26 +0530

但实际上让电影从另一个时间开始(从头开始的一天)。

当我检查我的日志时,给 db 的查询是

SELECT  "movies".* FROM "movies" WHERE (show_time > '2020-07-23 07:42:49.391379') ORDER BY "movies"."start_time" ASC LIMIT $11

这里的时间是2020-07-23 07:42:49.391379

我不明白为什么会发生这种情况,有什么办法可以避免这种情况。

标签: ruby-on-rails

解决方案


DateTime.now所在的时区为 +5:30,这就是您可以看到此值的原因#Thu, 23 Jul 2020 13:03:26 +0530

现在,当调用 ActiveRecord 时,它将获取 GMT 值并检查它。您starts_at在数据库中也应该GMT用于夏令时以及与时间和日期相关的任何其他内容。

我建议您修复数据库中的日期(始终将它们放在 GMT 中),这样您的查询应该可以工作。

示例:如果电影从 开始13:30 + 5:30,则应将其保存为08:30 + 00:00您的数据库中。


推荐阅读