ruby-on-rails - 将 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
我不明白为什么会发生这种情况,有什么办法可以避免这种情况。
解决方案
您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
您的数据库中。
推荐阅读
- javascript - 使用Javascript单击锚标记时如何更改输入标记的值、名称和占位符?
- vb.net - 浏览器阻止 ASPXGridview 在新窗口中弹出页面
- typescript - 开玩笑 [Vue 警告]:渲染错误:“TypeError:无法读取未定义的属性‘类型’”
- c# - 在 ASP/C# 中找到了一个 HTMLScrambler:有没有办法用 PHP 做到这一点?
- java - spring boot项目中FF4J配置错误
- javascript - 了解 renderItem 属性中的解构
在 React Native 中 - r - 编译相同id的数据
- javascript - Vuetify - v-tooltip 对断点没有响应?
- ios - 如何设置两个 UILabel 压缩优先级以使一个垂直推动另一个?
- c#-4.0 - 如何在 C# 中查找当前文件位置?