确定双周计划是否与给定日期匹配

时间:2014-12-17 23:40:46

标签: ruby

我创建了多个Schedule个对象,其日期时间为started_at,从星期一开始。

我有Locationvisit_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?

1 个答案:

答案 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