Php 计算任务的频率间隔

Php 计算任务的频率间隔,php,datetime,intervals,Php,Datetime,Intervals,我有一个cron作业,它从数据库获取结果,以检查用户设置的时间间隔是否与今天的日期一致。我目前正在考虑按以下方式进行: 获取该行的时间列。Ex:2017-05-25 00:00:00 设置频率。例:每两周一次 以上述格式获取当前日期。Ex:2017-05-31 00:00:00 在几天内获得差异。例:6天 将频率设置转换为天。例:2周=14天 将(时间差(天))除以(频率(天)。Ex:6/14 这样的话,我只会得到结果是真的,当两个星期已经过去了,因为时间设置。即14/14、28/14、42/1

我有一个cron作业,它从数据库获取结果,以检查用户设置的时间间隔是否与今天的日期一致。我目前正在考虑按以下方式进行:

  • 获取该行的时间列。Ex:2017-05-25 00:00:00
  • 设置频率。例:每两周一次
  • 以上述格式获取当前日期。Ex:2017-05-31 00:00:00
  • 在几天内获得差异。例:6天
  • 将频率设置转换为天。例:2周=14天
  • 将(时间差(天))除以(频率(天)。Ex:6/14
  • 这样的话,我只会得到结果是真的,当两个星期已经过去了,因为时间设置。即14/14、28/14、42/14

    如果频率以月为单位,我可以开始除以30。但不知何故,这感觉像是一种令人讨厌的方式。因此,我的问题是,是否有更好的方法进行计算,以检查差异

    正如上面的例子所解释的,这就是我所做的

    ` $frequency = ; // Get the relevant fields from db
      $today = date(Y-m-d H:i:s);
         foreach ($frequency as $key => $value) {
           $frequency_in_days;
           $frequency_type = $value->type;
           $frequency_repeat = $value->repeat;
    
           if($frequency_type == 1){
             $frequency_in_days = $frequency_repeat;
           } elseif($frequency_type == 2) {
             $frequency_in_days = $frequency_repeat * 7;
           } elseif($frequency_type == 3) {
             $frequency_in_days = $frequency_repeat * 30;
           } elseif($frequency_type == 4) {
             $frequency_in_days = $frequency_repeat * 365;
           }
    
          //  Get number of days spent between start_date and today in days.
           $interval = date_diff($value->start_date, $today)->format('%a');
           $result = $interval % $frequency_in_days;
    
           if ($result == 0) {
            //  Frequency falls today! Do the job.
           }
         }`
    
    注意:cron作业运行此脚本。脚本需要再次检查今天的频率是否低于设置的频率

    为了论证起见,这是计算差异的最佳逻辑吗

    谢谢。

    这会有用的

    Table "schedule" 
    `last_run` timestamp, 
    `frequency_seconds` int
    
    应每两周执行一次的任务的查询示例:

    SELECT *
    FROM schedule
    WHERE TIMESTAMPDIFF(last_run, NOW()) >= frequency_seconds
    

    获取行后,将上次运行的
    更新为
    NOW()

    是否有代码?记录集中的行的格式?第一点的日期是什么?上次事件发生了吗?我认为你应该把你的问题改写一下,让它更清楚,更不容易闭嘴。我添加了代码。我以前没有添加任何代码,因为我认为问题陈述已经足够解释了。谢谢你指出这一点。我删除了我的问题,因为
    这个数据库有数千条记录
    ,而在最初的问题中,你可以循环记录。如果你想使用mysql,mysql内置了这个功能,请参见