首页
学习
活动
专区
工具
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.4K21

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.1K10

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 {

87820

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 开始调试,浏览器访问你目前的

5K20

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

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

2.8K10

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,继续提供服务。

97050

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.1K10

PHP操作临时文件

PHP操作临时文件 关于文件相关的操作,想必大家已经非常了解了,将来我们刷到手册相关的文件操作函数时也会进行详细的讲解。今天,我们先来了解一下 PHP 关于临时文件相关的一些内容。...PHP 默认情况下也会将临时文件目录指向这个目录,包括 SESSION 文件之类的临时文件都会保存在这里。它可以 php.ini 文件通过 sys_tmp_dir 进行设置。...当然,动态运行的 PHP 程序,我们也可以通过一个函数来获得当前的临时文件目录。...手册说使用这个函数创建的文件脚本运行结束后也会自动删除,但是测试后发现脚本结束时文件并不会删除。 调用函数并写入内容后,我们暂停了十秒。...日后的开发我们可以多多尝试使用这样的函数,或许它们能够为我们带来不少的生产力提升。

2.1K20

PHPCTF的应用场景

PHP常用函数 strpos("1","2")1查找二并返回索引或false str_replace("1","2","3")3找1并替换为2 define()定义大小写不敏感的常量 !...(多余的空格、制表符、换行) (通过 PHP stripslashes() 函数)删除用户输入数据的反斜杠(\) 这些超全局变量是: $GLOBALS $_SERVER $_REQUEST...文件指针文件的开头开始。w打开文件为只写。删除文件的内容或创建一个新的文件,如果它不存在。文件指针文件的开头开始。a打开文件为只写。文件的现有数据会被保留。文件指针文件结尾开始。...r+打开文件为读/写、文件指针文件开头开始。w+打开文件为读/写。删除文件内容或创建新文件,如果它不存在。文件指针文件开头开始。a+打开文件为读/写。文件已有的数据会被保留。...php中所有用户自定义的函数类和关键词(if else echo)不区分大小写但是变量大小写敏感php is_numeric()绕过 [判断是否为数字或数字字符串]用url编码的空字符%00或%20进行绕过

10010

PHP弱类型CTF的应用

PHP作为世界上最好的语言(然而人生苦短,我用python),CTF web题中大放异彩,深受出题人的喜爱。...Bugku WEB Write Up(二)《矛盾》这题中我们已经初步领略了PHP弱类型的魅力 也明白了为什么“test”会等于0 这里再举几个例子,加深一下理解 “1test”与1相比较时,会先将“...所以先缕清代码的逻辑:接收一个“md5”的参数,然后对这个参数进行md5计算,如果计算的md5值与输入的参数相等,就可以通过验证。...WEB Write Up(四)》之《前女友》这道题中,对strcmp函数的绕过进行了详细讲解,同时对phpmd5()函数(sha1()函数类似)无法处理数组类型的数据从而可以绕过进行了讲解。...这篇文章对php弱类型CTF比赛的总结并不全面,如果大家在做题的过程遇到了新的套路和绕过姿势,欢迎一起交流哦~

4K51
领券