用PHP计算下一个cron运行日期
作为前言,我知道cron表达式库存在。但我只需要这一点点,就可以在PHP的表中快速显示。此外,该库还需要PHP7.1,我必须在PHP5.3站点上实现这一点,而该站点并没有真正设置composer 所以考虑到这个cron时间表用PHP计算下一个cron运行日期,php,cron,Php,Cron,作为前言,我知道cron表达式库存在。但我只需要这一点点,就可以在PHP的表中快速显示。此外,该库还需要PHP7.1,我必须在PHP5.3站点上实现这一点,而该站点并没有真正设置composer 所以考虑到这个cron时间表 0002,06,10,14,18,22*** 如何根据当前日期计算下一个运行日期 我在这里找到了另一个答案,它一直在工作,直到它遇到了多个明确的小时 function calculate_next_cronjob($cronjob, $elementpositions) {
0002,06,10,14,18,22***
如何根据当前日期计算下一个运行日期
我在这里找到了另一个答案,它一直在工作,直到它遇到了多个明确的小时
function calculate_next_cronjob($cronjob, $elementpositions)
{
$wildcard = false;
$elements = preg_split('/[^\d*]+/', $cronjob);
foreach (preg_split('/[^a-z]+/i', $elementpositions) as $key => $element) {
$value[$element] = $elements[$key];
switch ($element) {
case 's':
if ($value[$element] == '*') {
$value[$element] = date('s') + 1;
$wildcard = true;
}
break;
case 'i':
if ($value[$element] == '*') {
$value[$element] = date('i') + ($wildcard === true ? 0 : 1);
$wildcard = true;
}
break;
case 'H':
if ($value[$element] == '*') {
$value[$element] = date('H') + ($wildcard === true ? 0 : 1);
$wildcard = true;
}
break;
case 'd':
if ($value[$element] == '*') {
$value[$element] = date('d') + ($wildcard === true ? 0 : 1);
$wildcard = true;
}
if (intval($value[$element]) == 0) {
$value[$element] = 1;
}
break;
case 'm':
if ($value[$element] == '*') {
$value[$element] = date('m') + ($wildcard === true ? 0 : 1);
$wildcard = true;
}
if (intval($value[$element]) == 0) {
$value[$element] = 1;
}
break;
default:
unset($value[$element]);
}
}
$cy = date('Y');
$ny = $cy + 1;
if (time() < mktime($value['H'], $value['i'], $value['s'], $value['m'], $value['d'], $cy)) {
$value['Y'] = $cy;
} else {
$value['Y'] = $ny;
}
return date('Y-m-d H:i', mktime($value['H'], $value['i'], $value['s'], $value['m'], $value['d'], $value['Y']));
}
函数计算下一个cronjob($cronjob,$elementpositions)
{
$wildcard=false;
$elements=preg_split('/[^\d*]+/',$cronjob);
foreach(preg_split('/[^a-z]+/i',$elementpositions)作为$key=>$element){
$value[$element]=$elements[$key];
开关($element){
案例s:
如果($value[$element]='*'){
$value[$element]=日期('s')+1;
$wildcard=true;
}
打破
案例“i”:
如果($value[$element]='*'){
$value[$element]=date('i')+($wildcard===true?0:1);
$wildcard=true;
}
打破
案例“H”:
如果($value[$element]='*'){
$value[$element]=date('H')+($wildcard===true?0:1);
$wildcard=true;
}
打破
案例“d”:
如果($value[$element]='*'){
$value[$element]=date($d')+($wildcard===true?0:1);
$wildcard=true;
}
if(intval($value[$element])==0){
$value[$element]=1;
}
打破
案例“m”:
如果($value[$element]='*'){
$value[$element]=date('m')+($wildcard===true?0:1);
$wildcard=true;
}
if(intval($value[$element])==0){
$value[$element]=1;
}
打破
违约:
未设置($value[$element]);
}
}
$cy=日期('Y');
$ny=$cy+1;
如果(time()
我想可以修改这个函数来解释这个问题。我需要帮助做那些修改
谢谢DateTime类扩展dt()还有一个方法nextCron()。它是一个单文件版本,在PHP5.3.8下运行。。7.x,不需要编写器,也不需要外部要求。@jspit看起来很有趣。我试试看,谢谢