Rails中的日期与今天的日期相比较

4

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

有什么想法吗?

bdays = Soldier.find(:all, :conditions => ["birth_date LIKE ?", Date.today] )
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])

嗨,这真是非常有帮助,非常感谢。但我仍然遇到一个问题,对于 SQLite,STRFTIME('%m',birth_date)=?会将一月的月份返回为01,而Date.today.month为1,从而导致一个错误结果。我已经搜索了很多地方,试图找到其他人是否也有这个问题。 - looloobs

4

我想添加Postgres:

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

(该代码是使用Postgres数据库查询出生日期为当天日期的士兵信息)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接