我在参数中得到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/