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 time
和end 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_date
和 end_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
计算本地时区的时间。
我想知道是否有人可以帮助处理这个 ActiveRecord 查询。我的活动有开始日期和结束日期。我想 运行 一个 cron 作业,它在下个周末的每个星期四获取所有事件。
类似...
@events = Event.where("start_date <= ?", (Date.today + 3.days)).where("end_date >= ?", (Date.today + 3.days))
我知道以上内容不正确,但希望有人可以启发我更简单的方法来查找此查询的事件...在此先感谢!
我们可以找到下周末的start time
和end 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_date
和 end_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
计算本地时区的时间。