[英]ActiveRecord scope to find records created today?
这必须是一件容易的事情,但我认为Rail的时区实施正在放弃我的工作......
如何在Rails 3(和ruby 1.9.2)中创建一个范围来查询今天创建的记录?
目前,我这样做:
scope :today, lambda {
where("created_at >= ? and created_at <= ?",
Date.today.beginning_of_day, Date.today.end_of_day)
}
它似乎没有按预期工作。 我希望“今天”代表用户当地时区从上午12点到晚上11:59的24小时。 我需要将日期转换为UTC或其他什么?
您需要考虑用户的时区。 也就是说,用户时区的日期和结束日期。 为此,首先解析用户时区的当前时间。 您可以将区域设置为用户的时区并进行计算,也可以使用以下代码的变体直接解析时间。
timezone = current_user.timezone # Mountain Time (US & Canada)
users_current_time = ActiveSupport::TimeZone[timezone].parse(Time.now.to_s)
users_current_time.beginning_of_day
和users_current_time.end_of_day
应生成正确的时间范围(如果UTC是您的应用程序时区,则应用程序将转换为UTC并触发查询)
如果你只想用范围来做,那么我建议你设置所有动作的Time.zone = current_user.timezone
before_filter
并在范围内使用它。 这个railscast提供了关于如何做到这一点的公平想法。
如果你正在使用mysql,那么我认为你只想在当天匹配,而不是时间对吗? 换句话说,你想要从12月1日开始的所有记录。 如果您只是搜索日期,则在12月1日凌晨12:00至晚上11:59之间隐含。
scope :today, lambda {
where("created_at = ?",
Time.now.strftime("%Y-%d-%m")
}
这样的事情应该有效
这个怎么样?
scope :today, lambda {
where("created_at >= ? and created_at <= ?",
Date.today.beginning_of_day.utc, Date.today.end_of_day.utc)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.