1. 准备一个标准crontab文件 ./crontab
$date = array( \'minutes\' =>self::_parseCronNumbers($cron[0],0,59),
\'hours\' =>self::_parseCronNumbers($cron[1],0,23),
\'dom\' =>self::_parseCronNumbers($cron[2],1,31),
\'month\' =>self::_parseCronNumbers($cron[3],1,12),
\'dow\' =>self::_parseCronNumbers($cron[4],0,6),
);
// limited to time()+366 - no need to check more than 1year ahead
for($i=0;$i<=60*60*24*366;$i+=60){
if( in_array(intval(date(\'j\',$start+$i)),$date[\'dom\']) &&
in_array(intval(date(\'n\',$start+$i)),$date[\'month\']) &&
in_array(intval(date(\'w\',$start+$i)),$date[\'dow\']) &&
in_array(intval(date(\'G\',$start+$i)),$date[\'hours\']) &&
in_array(intval(date(\'i\',$start+$i)),$date[\'minutes\'])
){
return $start+$i;
}
}
return null;
}
/**
* get a single cron style notation and parse it into numeric value
*
* @param string $s cron string element
* @param int $min minimum possible value
* @param int $max maximum possible value
* @return int parsed number
*/
protected static function _parseCronNumbers($s,$min,$max)
{
$result = array();
$v = explode(\',\',$s);
foreach($v as $vv){
$vvv = explode(\'/\',$vv);
$step = empty($vvv[1])?1:$vvv[1];
$vvvv = explode(\'-\',$vvv[0]);
$_min = count($vvvv)==2?$vvvv[0]:($vvv[0]==\'*\'?$min:$vvv[0]);
$_max = count($vvvv)==2?$vvvv[1]:($vvv[0]==\'*\'?$max:$vvv[0]);
for($i=$_min;$i<=$_max;$i+=$step){
$result[$i]=intval($i);
}
}
ksort($result);
return $result;
}
}
本文地址:https://www.stayed.cn/item/2102
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我