【问题标题】:Rails - Query records before or after 5AM today?Rails - 在今天凌晨 5 点之前或之后查询记录?
【发布时间】:2016-10-04 12:34:52
【问题描述】:

我需要编写一个范围(或方法)来根据一天中的时间查询事件 - 基本上我希望有“未来”和“过去”事件 - 但在早上 5 点开始的偏移量。

用例是一家夜总会。凌晨 1 点,活动仍在继续,门卫仍然需要使用活动,就好像它即将到来一样。但是到凌晨 5 点,活动结束了,业主们现在想看看进展如何。

我有这样的范围(日期是日期时间):

scope :future, -> { where("date >= ?", Date.today + 5.hours) }
scope :past, -> { where("date < ?", Date.today + 5.hours) }

但这不起作用。有人对我如何做到这一点有任何见解吗?

编辑:永远喜欢反对者!我不知道如何更清楚地表达这一点。在活动日期凌晨 5 点,我希望活动属于过去的范围。非常简单的问题/问题。祝你有美好的一天。

【问题讨论】:

  • 你有两个scopes 同名
  • 抱歉打错了。
  • “根本不工作”是什么意思?你预计会发生什么,实际发生了什么?帮助我们帮助您。
  • 那么如果现在是凌晨 1 点,那么接下来的四个小时应该算“过去”吗?
  • 不,如果是凌晨 1 点,距离过去还有 4 个小时。想想夜总会……事件仍然需要出现在门卫面前。但到了凌晨 5 点,活动就结束了,业主们想看看活动进展如何。

标签: ruby-on-rails ruby time


【解决方案1】:

如果 rails 在 UTC 中节省您的时间,您可能会遇到时区问题。你可以试试Time.now.utc + 5.hours

【讨论】:

    【解决方案2】:

    Date.today 方法使用操作系统提供的系统日期和时间功能,因此使用它不是一个好习惯。

    您应该明确指定时区。

    有关更多信息,请参阅此问题的答案:Is Date.today in UTC?

    【讨论】: