使用datamapper,如何按月和年过滤日期字段?
我可以使用今天的日期过滤所有记录。
:date => Date.today
但我很好奇是否有一个优雅的解决方案 从2012年12月返回所有记录。
posts.all
+----+------------+
| id | date |
+----+------------+
| 1 | 2009-10-20 |
| 2 | 2012-11-18 |
| 3 | 2012-12-10 |
| 4 | 2012-12-14 |
+----+------------+
posts.all(:date => Date.today)
+----+------------+
| id | date |
+----+------------+
| 4 | 2012-12-14 |
+----+------------+
答案 0 :(得分:1)
我认为您最好的选择是使用日期范围表单(这将导致SQL“BETWEEN”查询):
posts.all(:date => (Date.parse('2012-12-01') .. Date.parse('2012-12-31')))
对于其他年/月,您必须查找或计算月份的最后日期,而不是像上面的示例中那样对其进行硬编码。
def month_range(year, month)
d0 = Date.parse([year, month, 1].join('-'))
(d0 .. (d0>>1)-1)
end
posts.all(:date => month_range(2012, 12))