【发布时间】:2018-04-19 18:53:52
【问题描述】:
我想从给定字符串(如 Cron Format 和 seconds 参数(不完全等于 cron 格式)中获取运行 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");
它按预期读取2018-03-01 00:00:00,但我正在寻找的是一种获取下一个 Crontab 运行日期(2018-04-01 00:00:00) 的方法。
设置添加月份的方式并不能解决问题,因为 cron 格式 可以每小时设置一次,如:
<second> <minute> <hour> <day> <month> <week_day>
00 00 * * * *
【问题讨论】:
-
cron 作业的执行是否被记录在任何地方(日志文件等)?
-
@SpacePhoenix nop,但为什么呢?
-
@fiskolin,你有机会检查我发布的链接中的代码吗?
-
cron 表达式比您想象的要复杂得多。您需要使用库。不要成为英雄。