Rails Date по сравнению с Date.today - PullRequest
4 голосов
/ 13 января 2010

У меня есть переменная birth_date в формате Date. Я хочу сравнить его с Date.today, как показано ниже. Проблема в том, что он возвращается ложным, потому что хочет сравнить год. Это день рождения, поэтому меня не волнует год, когда я просто пытаюсь определить, равна ли дата рождения (месяц и день) дате.дня.день.монт.

Есть идеи?

bdays = Soldier.find(:all, :conditions => ["birth_date LIKE ?", Date.today] )

Ответы [ 2 ]

11 голосов
/ 13 января 2010

Вам нужно будет разбить дату, потому что вы хотите игнорировать год. Вам нужно будет использовать некоторые функции, предоставляемые вашим провайдером SQL (в примере ниже используется MySQL):

bdays = Soldier.find(:all, :conditions => ["DAY(birth_date) = ? AND MONTH(birth_date) = ?", Date.today.day, Date.today.month])

если вы используете SQLite (база данных по умолчанию для rails), это будет немного сложнее, потому что у них нет реального типа даты:

bdays = Soldier.find(:all, :conditions => ["STRFTIME('%d', birth_date) = ? AND STRFTIME('%m', birth_date) = ?", Date.today.day, Date.today.month])
4 голосов
/ 16 августа 2012

понял, я бы добавил postgres:

Soldier.where("EXTRACT(DAY FROM birth_date) = ? AND EXTRACT(MONTH FROM birth_date) = ?", Date.today.day, Date.today.month)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...