Rails,ActiveRecord,查找周末的所有事件

Rails, ActiveRecord, Finding all events that fall on weekend

我想知道是否有人可以帮助处理这个 ActiveRecord 查询。我的活动有开始日期和结束日期。我想 运行 一个 cron 作业,它在下个周末的每个星期四获取所有事件。

类似...

@events = Event.where("start_date <= ?", (Date.today + 3.days)).where("end_date >= ?", (Date.today + 3.days))

我知道以上内容不正确,但希望有人可以启发我更简单的方法来查找此查询的事件...在此先感谢!

我们可以找到下周末的start timeend time,这样以后查询就容易了。

# Start weekends time
start_next_saturday = Date.today.end_of_week.at_beginning_of_day - 1.days
# End weekends time
end_next_sunday     = Date.today.end_of_week.at_end_of_day

arel_table = Event.arel_table
@events    = Event.where(arel_table[:start_date].lteq(end_next_sunday)
                          .and(arel_table[:end_date].gteq(start_next_saturday)))

顺便说一句,Date.today + 3.days可能是一种不正确的方法,所以按照上述逻辑找到周末时间更准确!

试试这个

Event.where(created_at: (Date.today.end_of_week-1..Date.today.end_of_week))

如果我尝试将您的问题转化为算法,我认为您所追求的是:找到所有在 start_date 期间或之前 即将到来的周末(即周末结束之前) end_date 即将到来的周末期间或之后(即周末开始之​​后)。这样我们就可以 找到至少部分涵盖周末的活动

如果您 运行 在星期四抽取佣金,那么可以这样检索下一个周末:

weekend_start = Date.today.end_of_week - 1    # the Saturday's date
weekend_end   = Date.today.end_of_week        # the Sunday's date

有了这个,查询就简单了:

@events = Event.where("start_date <= ? AND end_date >= ?", weekend_end, weekend_start)

如果您的 start_dateend_date 列不是 DATE 而是 DATETIME 列,则您必须像下面这样定义周末的开始和结束:

weekend_start = Time.zone.now.end_of_week.midnight - 1.day   # 00:00 at Saturday
weekend_end   = Time.zone.now.end_of_week                    # 23:59 at Sunday

定义使用 Time.zone 计算本地时区的时间。