1

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

1 回答 1

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))
于 2012-12-14T21:33:46.807 回答