一个普通的 'ol 对象的大问题Date
是它不包含时间信息。因此,在您目前拥有的查询中,您最终会在指定日期之前获得所有内容,因为查询将解析为WHERE created_at <= '2013-09-27'...
. 您可以在不丢失记录的情况下解决此问题的一种方法是简单地将 1 天添加到您的日期对象,如下所示:
def total_by_date(my_date)
where{created_at <= (my_date + 1.day)}.count
end
通过这种方式,您也完全不需要担心时区;你只是在看日期部分。
**编辑**
在评论中回答您的问题:
关于为什么+ 1.day
有效,想想这样的日期:my_date
出来看起来像2013-09-24
在查询中,但它基本上与2013-09-24 00:00:00
. 这与设置为 9 月 24 日午夜的日期时间/时间戳相同。因此,用简单的英语来说,如果您的比较是“在 9 月 24 日午夜或之前给我所有内容”,那么您将得到所有的结果,并且存在早于该特定时间和日期,但 9 月 24 日当天晚些时候发生的任何事情都不会出现。
因此,+ 1.day
同样的“问题”仍然存在,只是它现在对您有利,因为我们的查询现在是“9 月 25 日午夜或之前的任何事情”。
注意:从技术上讲,对于恰好在 9 月 25 日午夜创建的任何内容,您可能会得到不想要的匹配,但您可以轻松地将比较更改为简单<
而不是<=
修复该问题。