SeanPlusPlus
SeanPlusPlus

Reputation: 9043

datamapper, how do you filter a date field by month and year?

using datamapper, how do you filter a date field by month and year?

I can filter all records with today's date.

:date => Date.today

but i am curious if there is an elegant solution for returning all records from december 2012.

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

Upvotes: 1

Views: 496

Answers (1)

maerics
maerics

Reputation: 156642

I think your best bet is to use the date range form (which will result in an SQL "BETWEEN" query):

posts.all(:date => (Date.parse('2012-12-01') .. Date.parse('2012-12-31')))

For other years/months you'll have to lookup or compute the last date of the month instead of hardcoding them as in the example above.

def month_range(year, month)
  d0 = Date.parse([year, month, 1].join('-'))
  (d0 .. (d0>>1)-1)
end
posts.all(:date => month_range(2012, 12))

Upvotes: 1

Related Questions