Rails日期与Date.today相比

时间:2010-01-12 22:33:49

标签: ruby-on-rails date conditional-statements

我在Date格式中有一个birth_date变量。我想将它与Date.today进行比较,如下所示。问题是它回来是假的,因为它也希望比较年份。这是一个生日,所以我不关心今年只是想看看birth_date(月和日)是否等于Date.today.day.month。

有什么想法吗?

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

2 个答案:

答案 0 :(得分:11)

你需要打破你的日期,因为你想忽略这一年。您将需要使用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])

答案 1 :(得分:4)

想我会添加postgres:

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