判断方式 将规则以字符串形式扔进parse_crontab
方法中,到时间了就true,不符合就false
function parse_crontab(string $frequency='* * * * * *') : bool
{
$time = explode(' ', date('s i G j n w'));
$crontab = explode(' ', $frequency);
$run = true;
foreach($crontab as $k => $v)
{
if($v == '*') continue;
$ss = explode(',', $v);
foreach($ss as $s)
{
if($s == '*') continue;
if(preg_match('/^(\d+)$/', $s))
{
if($time[$k] != $s)
{
$run = false;
break;
}
}
if(strpos($s, '-') !== false)
{
[$min, $max] = explode('-', $s);
if($time[$k] < $min || $time[$k] > $max)
{
$run = false;
break;
}
}
if(strpos($s, '/') !== false)
{
$d = str_replace('*/', '', $s);
if($time[$k] % $d !== 0)
{
$run = false;
break;
}
}
}
if(!$run) break;
}
return $run;
}