4

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

有任何想法吗?

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

2 回答 2

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])
于 2010-01-12T22:43:30.650 回答
4

想我会添加postgres:

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

于 2012-08-16T19:17:17.710 回答