用PHP计算下一个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) {

作为前言,我知道cron表达式库存在。但我只需要这一点点,就可以在PHP的表中快速显示。此外,该库还需要PHP7.1,我必须在PHP5.3站点上实现这一点,而该站点并没有真正设置composer

所以考虑到这个cron时间表

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看起来很有趣。我试试看,谢谢