首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在PHP中计算cron next-run-time

在PHP中计算cron next-run-time,可以使用以下代码:

代码语言:php
复制
<?php
function getNextRunTime($cron_expression) {
    $cron = preg_split("/[\s]+/", $cron_expression);
    if (count($cron) < 6) {
        return false;
    }
    $date = new DateTime();
    $date->setTimezone(new DateTimeZone('UTC'));
    $current_time = $date->format('Hi');
    $next_run_time = false;
    $next_run_time_in_seconds = PHP_INT_MAX;
    $current_time_in_seconds = strtotime($date->format('Y-m-d H:i:00'));
    $cron_parts = array(
        'minute' => $cron[0],
        'hour' => $cron[1],
        'day' => $cron[2],
        'month' => $cron[3],
        'weekday' => $cron[4],
    );
    for ($i = 0; $i < 60; $i++) {
        $date->modify('+1 minute');
        $next_time_in_seconds = strtotime($date->format('Y-m-d H:i:00'));
        if ($next_time_in_seconds > $current_time_in_seconds) {
            $found = true;
            foreach ($cron_parts as $cron_part_key => $cron_part_value) {
                if ($cron_part_key == 'minute' || $cron_part_key == 'hour') {
                    continue;
                }
                $value = $date->format('Y-m-d ') . $date->format('H:i:00');
                $value_in_seconds = strtotime($value);
                if (!checkCronExpression($cron_part_value, $value_in_seconds, $cron_part_key, $date)) {
                    $found = false;
                    break;
                }
            }
            if ($found) {
                $next_run_time = $date->format('Hi');
                $next_run_time_in_seconds = $next_time_in_seconds;
                break;
            }
        }
    }
    if ($next_run_time === false) {
        return false;
    }
    return $next_run_time;
}

function checkCronExpression($cron_part_value, $value_in_seconds, $cron_part_key, $date) {
    $cron_part_value = str_replace('*', '0', $cron_part_value);
    $cron_part_value = str_replace('?', '0', $cron_part_value);
    $values = explode(',', $cron_part_value);
    foreach ($values as $value) {
        $value = trim($value);
        $value = str_replace('/', '-', $value);
        $value = str_replace(' ', '', $value);
        $range = explode('-', $value);
        if (count($range) == 2) {
            $start = $range[0];
            $end = $range[1];
            if ($start > $end) {
                if ($value_in_seconds >= strtotime($date->format('Y-m-d ') . $start . ':00') && $value_in_seconds <= strtotime($date->format('Y-m-d ') . $end . ':59')) {
                    return true;
                }
            } else {
                if ($value_in_seconds >= strtotime($date->format('Y-m-d ') . $start . ':00') && $value_in_seconds <= strtotime($date->format('Y-m-d ') . $end . ':59')) {
                    return true;
                }
            }
        } else {
            $value = str_replace('-', ':', $value);
            if ($value_in_seconds == strtotime($date->format('Y-m-d ') . $value . ':00')) {
                return true;
            }
        }
    }
    return false;
}

这段代码可以计算cron表达式的下一次运行时间。它使用了PHP的DateTime类来处理日期和时间,并使用正则表达式来解析cron表达式。它还使用了一个名为checkCronExpression的辅助函数来检查cron表达式的每个部分是否匹配当前时间。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

6分1秒

为什么有些浮点数在计算机中无法精确表示?

6分26秒

新型显存技术在人工智能与高性能计算中的无限潜能:GDDR7

-

四川大山深处藏着神秘“印钞厂”

11分2秒

变量的大小为何很重要?

5分44秒

最强大脑对决4500名顶尖极客!腾讯极客挑战赛冠军郑林楷独家专访

1分36秒

SOLIDWORKS Electrical 2023电气设计解决方案全新升级

1分4秒

人工智能之基于深度强化学习算法玩转斗地主,大你。

1分45秒

西安视频监控智能分析系统

4分48秒

1.11.椭圆曲线方程的离散点

2分33秒

SuperEdge易学易用系列-如何借助tunnel登录和运维边缘节点

7分58秒
7分31秒

人工智能强化学习玩转贪吃蛇

领券