我有一个名为
Event
的模型。我希望能够获取在某个特定日期创建的所有事件,应该是这样的
Event.where(created_at: "20/01/2019".to_date)
问题是
created_at
字段还包含分钟、秒等,我想忽略它们。我只想按日、月、年比较日期。有什么办法可以实现这个目标吗?
Date#beginning_of_day
和 Date.end_of_day
两者均由 ActiveSupport
核心扩展提供。
d = '2019-01-20'.to_date
Event.where(created_at:(d.beginning_of_day..d.end_of_day))
这不一定会比较“...日期、月份和年份”。相反,它会创建一个包含一整天的 Between 子句。如果您想使用
Hash
查找器语法,这可能是最好的方法。
你可以和
一起去Event.where(
Arel::Nodes::NamedFunction.new('CAST',
[Event.arel_table[:created_at].as('DATE')]
).eq(d)
)
如果您真的只想比较日、月和年。
选项 1 将导致
events.created_at BETWEEN '2019-01-20 00:00:00' AND '2019-01-20 23:59:59'
选项 2 将导致
CAST(events.created_at AS DATE) = '2019-01-20'
Event.where(created_at: d.to_time.all_day)