首页
学习
活动
专区
工具
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表达式的每个部分是否匹配当前时间。

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

相关·内容

详解Linux怎么使用cron计划任务

crond 服务假设主机计算机 24 小时运行。那意味着如果在一个计划运行的期间关闭计算机,这些计划的任务将不再运行,直到它们计划的下一次运行时间。...anacron anacron 程序执行和 cron 一样的功能,但是它增加了运行被跳过的作业的能力,比如,如果计算机已经关闭或者其它的原因导致无法一个或多个周期中运行作业。...3、 run-parts 程序运行所有的 /etc/cron.hourly 目录的脚本。...然后,我 cron 目录增加一个符号连接,比如,/etc/cron.daily。 anacron 程序不是设计用于指定时间运行程序的。...更多的关于设置限制 我我的计算机上使用了很多运行计划任务的方法。所有的这些任务都需要一个 root 权限去运行。

3.5K21

HTML 嵌入 PHP 代码

PHP 与 HTML PHP 天生对 Web 和 HTML 友好, PHP 诞生之初,主要用于 Web 1.0 构建个人主页,那个时候,PHP 代表的是 Personal Home Page,随着... PhpStorm 编写 Html 代码 通过 php -S localhost:9000 启动 PHP 内置的 Web 服务器(已启动忽略),浏览器访问 http://localhost:9000... HTML 嵌入 PHP 代码 接下来,我们 hello.php ,将上一步 和 之间的 HTML 文本替换成 PHP 代码: 之间,并且末尾的 ?> 不能省略,包含纯 PHP 代码的文件,最后的 ?...小结 由此可见, PHP 文件,既可以编写纯 PHP 代码,也可以混合 HTML + PHP 代码进行编程( HTML 嵌入 PHP 代码需要通过完整的 进行包裹)。

6.2K10
  • php浮点数计算问题

    如果用php的+-*/计算浮点数的时候,可能会遇到一些计算结果错误的问题,比如echo intval( 0.58*100 );会打印57,而不是58,这个其实是计算机底层二进制无法精确表示浮点数的一个bug...所以基本上大部分语言都提供了精准计算的类库或函数库,比如php有BC高精确度函数库,下面达内php培训老师介绍一下一些常用的BC高精确度函数使用。   例子 <?...可见, 这个问题的关键点就是: “你看似有穷的小数, 计算机的二进制表示里却是无穷的”   so, 不要再以为这是PHP的bug了, 这就是这样的…..   ...PHP浮点型进行+-*%/存在不准确的问题   例如   $a = 0.1;   $b = 0.7;   var_dump((a + b) == 0.8);   打印出来的值为 boolean false...这些函数涉及到有关金钱计算时比较有用,比如电商的价格计算

    1.2K10

    goto语法PHP的使用

    goto语法PHP的使用 C++、Java及很多语言中,都存在着一个神奇的语法,就是goto。顾名思义,它的使用是直接去到某个地方。从来代码的角度来说,也就是直接跳转到指定的地方。...我们的PHP也有这个功能,我们先来看看它是如何使用的: goto a; echo "1"; // 不会输出 a: echo '2'; // 2 代码运行到goto位置时,就跳转到了a:所在的代码行并继续执行下去...感觉很好玩吧,这个功能对于复杂的嵌套if或者一些循环中进行跳出很有用,特别是针对某些异常或者错误情况的处理,比如: for ($i = 0, $j = 50; $i < 100; $i++) {...直接到这里输出或者处理异常情况了 感觉还不错是吧,不过goto语法也有一些限制情况: 目标位置只能位于同一个文件和作用域,也就是说无法跳出一个函数或类方法,也无法跳入到另一个函数 无法跳入到任何循环或者 switch 结构...%E4%B8%AD%E7%9A%84%E4%BD%BF%E7%94%A8.md 参考文档:https://www.php.net/manual/zh/control-structures.goto.php

    2.7K10

    谈谈JSONAPIPHP的应用

    其它简单的属性统统放置到 attributes 里,如果主对象存在一对一、一对多等关联对象,那么放置到 relationships 里,不过只是通过 type 和 id 字段放置一个链接,关联对象的实际内容统统放置根接点中的...php use League\Fractal\Manager; use League\Fractal\Resource\Collection; $articles = [ [...> 如果让我选最喜爱的 PHP 工具包,Fractal 一定榜上有名,它隐藏了实现细节,让使用者完全不必了解 JSONAPI 协议即可上手。...> 如果你是裸写 PHP 的话,那么 Fractalistic 基本就是最佳选择了,不过如果你使用了一些全栈框架的话,那么 Fractalistic 可能还不够优雅,因为它无法和框架本身已有的功能更完美的融合...php namespace App\Http\Resources; use App\Http\Resource; class ArticleResource extends Resource {

    89520

    VSCode配置PHP开发环境

    然后 cmd 输入 php -v 来查看你是否配置成功,正常情况如下: ?...添加配置 我下载下来的文件名为:php_xdebug-3.0.3-7.4-vc15-x86_64.dll 将其复制到 phpext 文件夹下,修改 php.ini 文件,文件末尾添加以下配置信息: [..." xdebug.client_port = 9001 注意:这是针对于 xdebug3 的配置,网上绝大多数教程已经失效(大部分是 xdebug2),用网上的教程你会发现你怎么样也不能进行断点调试 ...VSCode 安装调试插件 直接搜索 PHP Debug 然后安装即可,然后点击 VSCode 的 文件-首选项-设置,设置里面的扩展找到 php,点击 setting.json 添加以下一行配置:...断点调试 你需要在你的 php 工程文件夹创建 launch.json 文件,将里面的 port 改为之前 php.ini 文件设置的端口(我这里是 9001),然后打好断点, F5 开始调试,浏览器访问你目前的

    5.1K20

    计算架构添加边缘计算的利弊

    两种类型的边缘计算架构 权衡边缘计算模型是否合适时,首先要问的问题是哪种架构可用。主要有两种类型: •设备-边缘计算,其中直接在客户端设备上处理数据。...•云计算-边缘计算,其中边缘计算硬件上处理数据,而边缘计算硬件地理位置上比集中式云计算数据中心更靠近客户端设备。 如果客户端设备能够以统一的方式处理该处理负担,则设备-边缘计算模型可以很好地工作。...边缘计算的局限性 企业决定将工作负载移至边缘计算之前,需要评估支持这些边缘计算模型是否合理。这些限制可能使企业回到传统的云计算架构。...边缘计算处理和存储数据是不切实际的,因为这将需要大型且专门的基础设施。将数据存储集中式云计算设施成本将会低得多,也容易得多。 •智能照明系统。...允许用户通过互联网控制家庭或办公室照明的系统不会生成大量数据。但是智能照明系统往往具有最小的处理能力,也没有超低延迟要求,如果打开灯具需要一两秒钟的时间,那没什么大不了的。

    2.9K10

    Redis PHP的使用笔记

    前期学习推荐: redis 的数据结构类型 | redis 的五种数据结构 Redis 几种数据结构的应用场景 对于Redis的安装,可参考之前写的一篇文章: Redis 服务的安装与拓展操作指导...(Windows+Linux) 继续推荐: phpredis 的使用文档(英文) phpredis 中文手册 ——《redis中文手册》 php版 【phpredis 中文手册下载】 —— 链接...Redis 类的命名空间是根 \ phpredis 的命令和参数和 redis.io 的实际命令对应 ♫ 笔记 ①....事实上,更多时候 Redis 是在数据库和代码中间作为一个中间件使用,如果你发现你目前的数据库出现瓶颈,那么你就可以通过 Redis 来优化 ♬ 代码使用 可以参考视频 —— 【php 操作 redis...Redis Sentinal 着眼于高可用, master 宕机时会自动将 slave 提升为 master,继续提供服务。

    98750

    PHP,cookie和session的使用

    PHP工作原理:PHP通过setcookie函数进行Cookie的设置,任何从浏览器发回的Cookie,PHP都会自动的将他存储$_COOKIE的全局变量之中,因此我们可以通过$_COOKIE['key...用途:PHP的Cookie具有非常广泛的使用,经常用来存储用户的登录信息,购物车等,且使用会话Session时通常使用Cookie来存储会话id来识别用户,Cookie具备有效期,当有效期结束之后,...header("Set-Cookie:cookie_name=value"); cookie的删除与过期时间 PHP删除cookie也是采用setcookie函数来实现。...一般情况下,大多是使用所有路径的,只有极少数有特殊需求的时候,会设置路径,这种情况下只指定的路径才会传递cookie值,可以节省数据的传输,增强安全性以及提高性能。...用户登录成功以后,通常可以将用户的信息存储session,一般的会单独的将一些重要的字段单独存储,然后所有的用户信息独立存储。

    4K70

    PHP如何为匿名函数指定this?

    PHP如何为匿名函数指定this? 关于闭包匿名函数,JS中有个很典型的问题就是要给它绑定一个 this 作用域。...其实这个问题在PHP也是存在的,比如下面这段代码: $func = function($say){ echo $this->name, ':', $say, PHP_EOL; }; $func...而第二个参数 'Lily' 则是绑定一个新的 类作用域 ,它代表一个类型、决定在这个匿名函数能够调用哪些 私有 和 受保护 的方法,上例给出的三种方式都可以用来定义这个参数。...cool2'); // Fatal error: Uncaught Error: Cannot access private property Lily::$name call() 方法绑定 $this PHP7...当然,这也是看我们自己的业务情况了,毕竟两种形式我们写代码的时候都是可以自由选择的。 总结 其实包括闭包函数在内,这些特性都非常像JS。

    2.2K10
    领券