繁体   English   中英

ActiveRecord范围可以查找今天创建的记录吗?

[英]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_dayusers_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM