我创建了多个Schedule
个对象,其日期时间为started_at
,从星期一开始。
我有Location
个visit_frequency
个对象。其中一些设置为:bi_weekly
,在这种情况下,我只需要每隔一周看一次。
然而,事情并不总是按照计划进行,有时候Location
的访问次数或多或少次于。{/ p>
现在我正在做
Location.all.each do |location|
...
elsif location.frequency.rate == 'biweekly'
if (@schedule.start_date - location.last_visit_date) > 7
schedule_for_week location
end
问题是,如果我从现在开始超过7天Schedule
,那么Location
last_visit_date
将始终是> 7天。我需要计算它是否达到每两周一次的费率。
示例:
位置1 visit_frequency设置为:bi_weekly 位置1在第1周访问 第2周生成计划 - 位置1被遗漏,因为它在7天内 第3周生成计划 - 包括位置1,因为它在7天内 第4周生成计划 - 包括位置1,因为它在7天内
最后一行不应该发生。不应包括位置1,因为它是在第1周访问并计划在第3周。
如何计算一周是否在每两周一次的频率范围内?我猜测我需要使用beginning_of_week?
答案 0 :(得分:0)
据我了解你的问题,我相信会这样做:
require 'date'
def schedule?(sched_start_date, last_visit_date)
(sched_start_date - last_visit_date) % 14 > 7
end
sched_start_date = Date.parse("2014-12-29")
#=> #<Date: 2014-12-29 ((2457021j,0s,0n),+0s,2299161j)> a Monday
schedule?(sched_start_date, Date.parse("2014-12-04")) #=> true
schedule?(sched_start_date, Date.parse("2014-12-14")) #=> false
schedule?(sched_start_date, Date.parse("2014-12-20")) #=> true
schedule?(sched_start_date, Date.parse("2014-12-23")) #=> false