Это работает в postgreSQL ...
start_month = Date.today.month
start_day = Date.today.day
end_month = (Date.today + 10).month
end_day = (Date.today + 10).day
if start_month == end_month
@users = User.where("DATE_PART('month', birth_date) = ? AND DATE_PART('day', birth_date) >= ? AND DATE_PART('day', birth_date) <= ?", start_month, start_day, end_day)
else
@users = User.where("(DATE_PART('month', birth_date) = ? AND DATE_PART('day', birth_date) >= ?) OR (DATE_PART('month', birth_date) = ? AND DATE_PART('day', birth_date) <= ?)", start_month, start_day, end_month, end_day)
end
@users.order("DATE_PART('month', birth_date), DATE_PART('day', birth_date)")
Выбирает все записи с днями рождения в течение следующих 10 дней и сортирует их.
Если десять дней в будущем все те жемесяц (скажем, 14 декабря) выбирает декабрь между 14 и 24 ... если он в будущем месяце (скажем, 25 декабря), он выбирает декабрь до конца месяца и январь с начала до 4 числа.