检查轨道上的 ruby 中的 where 子句中的大于 updated_at



我在参数中得到updated_at字符串。我通过使用to_time转换它

updated_at = params["latest_updated_at"].to_time
chat_history = ChatHistory.where('updated_at > ?',updated_at)

但它不能正常工作。它还获得了一些< updated_at记录。我只想要> update_at.

参数的值就像"2016-03-17 18:06:36"

所以这可能是时区问题。如果您的时间戳始终以同一时区表示,您可以这样说:

ActiveSupport::TimeZone['America/Los_Angeles'].parse "2016-03-17 18:06:36"

这将为您提供一个TimeWithZone实例,您可以将其传递给where调用。(当然,America/Los_Angeles更改为合适的任何内容。如果您已将 Rails 配置为使用所需的时区,则可能会Time.zone.parse快捷方式。

如果时区可以根据current_user而变化,只需使用用户的首选项来获取正确的时区,然后使用它来解析您的字符串。

顺便说一句,您在有关问题的评论中得到了很多不好的建议:

  • 您不应该使用 to_date ,因为那样会丢失所有亚日分辨率。如果您没有正确考虑时区,您甚至可能无法选择正确的日期!

  • 解析字符串然后调用in_time_zone什么也不做,因为通过解析字符串,你已经在一个时区或另一个时区解释了它。 in_time_zone不会改变时间的瞬间,只会改变你当时站在哪里,因此它应该写成"太平洋下午5点"还是"中部时间下午6点"。

以下是一些关于 Rails 中时区的一般建议,以及如何推理它们(由我提供): http://illuminatedcomputing.com/posts/2014/04/timezones/

最新更新