我想知道是否有人可以帮助解决这个ActiveRecord问题。我的活动有开始和结束日期。我想做一个cron工作,每个星期四都会在即将到来的周末举办所有活动。
像...一样的东西。
@events = Event.where("start_date <= ?", (Date.today + 3.days)).where("end_date >= ?", (Date.today + 3.days))
我知道上面的内容不正确,但希望有人可以通过更简单的方式来启发我查找此查询的事件...提前致谢!
答案 0 :(得分:1)
我们可以在下周末找到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
顺便说一句,UPDATE s
SET s.Credits = s.Credits-3
FROM Student s JOIN deleted d ON s.stuID = d.stuID
可能是一种不正确的方法,所以用上述逻辑找周末时间更准确!
答案 1 :(得分:1)
如果我尝试将您的问题翻译成算法,我认为您所追求的是:查找在即将到来的周末期间或之前具有start_date
的所有事件(即之前)周末结束时和 {/ 1}} 在即将到来的周末期间(即周末开始之后)。这样我们就可以查找至少部分涵盖周末日的事件。
如果你在星期四运行你的佣金,那么可以检索下一个周末:
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
列不是DATE而是DATETIME列,则必须定义周末的开始和结束,如下所示:
end_date
定义使用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
来计算当地时区的时间。
答案 2 :(得分:0)
试试这个
Event.where(created_at: (Date.today.end_of_week-1..Date.today.end_of_week))