PHP - 获取下一次 crontab 运行的日期

标签 php cron

我想从给定的字符串(如 Cron Format)获取运行 cron 的下一个日期带有 seconds 参数(不完全等于 cron 格式)。

我的代码:

$cron_format = explode(" ", "00 00 00 01 * *"); // <second> <minute> <hour> <day> <month> <week_day>
$date_diff   = explode(" ", "s i H d m w");     // php Date @link http://php.net/manual/en/function.date.php
$format = [];

foreach( $date_diff as $key=>$value) {
    $format[$value] = $cron_format[$key] !== "*" ? date($value, strtotime($cron_format[$key])) : date($value);
}

$spf = sprintf(
"%s-%s-%s %s:%s:%s", 
date("Y"), $format["m"], $format["d"], $format["H"], $format["i"], $format["s"]
);

$date = DateTime::createFromFormat("Y-m-d H:i:s", $spf);

// returns 2018-03-01 00:00:00, expected was 2018-04-01 00:00:00
echo $date->format("Y-m-d H:i:s"); 

Fiddle

它按预期读取 2018-03-01 00:00:00,但我正在寻找的是获取下一个 Crontab 运行日期的方法 (2018-04-01 00 :00:00)

设置添加月份的方法并不能解决问题,因为cron 格式 可以按小时设置,如:

<second> <minute> <hour> <day> <month> <week_day>
   00       00      *      *      *         *

最佳答案

无需为此编写更多代码。请使用下面的库来做到这一点

https://github.com/mtdowling/cron-expression

用法:

<?php
// Works with cron expression
$cron = new Cron\CronExpression::factory('15 2,6-12 */15 1 *');
$cron->getNextRunDate();

关于PHP - 获取下一次 crontab 运行的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49493153/

相关文章:

php - 如何让 RabbitMQ worker 持续监听?

ruby-on-rails - Capistrano + Whenever gems - bin/rails : Permission denied

hadoop - crontab 作业未执行

php - CronJob 未在 GoDaddy 共享主机中启动

php - lcg_value() 是否有可能掷出完美的 1?

php - 在从 SVN 部署期间维护开发环境和实时环境之间的配置差异

php - 如何编写具有多个数据顺序的 MySql 查询?

javascript - node.js 中的 Cronjobs

PHPUnit 合并覆盖率报告未显示覆盖的方法左括号

php - 如何将一个mysql表拆分为多个表并查询正确的区域?