datamapper,如何按月和年过滤日期字段?

时间:2012-12-14 21:06:25

标签: ruby datamapper

使用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 |
+----+------------+

1 个答案:

答案 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))