如何在没有年份的情况下比较铁路中的日期?

时间:2011-09-10 10:37:32

标签: ruby-on-rails date compare

我正试图在未来两周内找到所有生日用户。

我尝试了以下内容:

User.find(:all, :conditions => ["DOB > ? and DOB <= ?", Date.today, 2.weeks.from_now])

这显然不起作用,因为DOB中的'年'不等于今年。

我只需要比较月份和日期。

我该怎么做呢?

4 个答案:

答案 0 :(得分:1)

您必须在dob列上执行mysql方法

如下所示

  SELECT FROM users  
         WHERE DAYOFYEAR(dob)in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)

你可以使用像WEEK这样的函数为你起作用Ref this用于mysql函数

在红宝石中

arr=[]
(0..13).each{|i| arr << (Date.today+i.day).day }
User.find(:all, :conditions => ["DAYOFYEAR(DOB) in (?)", arr])

答案 1 :(得分:1)

根据Salil的回答,我推导出以下内容,使其适用于sqlite:

arr = []
(0..14).each { |i| arr << (Date.today + i.day).yday }
@users = User.find(:all, :conditions => ["cast(strftime('%j', DOB) AS int) in (?)", arr])

答案 2 :(得分:0)

这可能有助于更改日期格式以进行比较,因为默认情况下需要Date.today.year。

              Date.strptime("{ #{DOB.month}, #{DOB.date} }", "{ %m, %d }").

Date.strptime(“{9,10}”,“{%m,%d}”)给出了

<Date: 2011-09-10 (4911629/2,0,2299161)>

如果你得到一些直接比较的代码,请发帖。

答案 3 :(得分:0)

postgresql的另一个方法:

scope :with_bday, -> (from, to) {
    where("EXTRACT(DOY FROM birthday)::int BETWEEN ? AND ?", *[
        from.yday,
        to.yday
    ])
}