PHP函数,它接收一个cron字符串并返回下一个运行时间戳

xun*_*xun 14 php cron scheduling crontab scheduled-tasks

我需要开发一个能够在不支持crontab的服务器上工作的任务系统.

我问是否有任何现有代码可以采用cron字符串(例如'0 0,12 1*/2*'并返回下一次计划运行的时间戳.

如果找不到这样的代码那么我该怎么做呢?

ber*_*hoo 12

您可以使用此类PHP-Parse-cron-strings-and-compute-schedules

它还会计算最后一次计划的运行

  • 另见http://stackoverflow.com/questions/321494/calculate-when-a-cron-job-will-be-executed-then-next-time (3认同)

diy*_*ism 8

使用此功能:

function parse_crontab($time, $crontab)
         {$time=explode(' ', date('i G j n w', strtotime($time)));
          $crontab=explode(' ', $crontab);
          foreach ($crontab as $k=>&$v)
                  {$time[$k]=intval($time[$k]);
                   $v=explode(',', $v);
                   foreach ($v as &$v1)
                           {$v1=preg_replace(array('/^\*$/', '/^\d+$/', '/^(\d+)\-(\d+)$/', '/^\*\/(\d+)$/'),
                                             array('true', $time[$k].'===\0', '(\1<='.$time[$k].' and '.$time[$k].'<=\2)', $time[$k].'%\1===0'),
                                             $v1
                                            );
                           }
                   $v='('.implode(' or ', $v).')';
                  }
          $crontab=implode(' and ', $crontab);
          return eval('return '.$crontab.';');
         }
var_export(parse_crontab('2011-05-04 02:08:03', '*/2,3-5,9 2 3-5 */2 *'));
var_export(parse_crontab('2011-05-04 02:08:03', '*/8 */2 */4 */5 *'));
Run Code Online (Sandbox Code Playgroud)