从类似 cronjob 的语法创建“下次运行时”日期

php
2022-08-30 22:56:38

在我正在创建的应用程序中,用户可以计划重复任务。简单地说,用于生成间隔模式的值为:

Minute: [0-59, 90 (each minute)]
Hour: [0-23, 90 (each hour)]
Day of month: [1-31, 90 (each day of month), 91 (last day of month)]
Month: [1-12, 90 (each month)]

因此,例如,我有以下格式:10 - 2 - 90 - 90,转换为.确定下一个运行时日期的方法能够向我显示此日期。但是,我正在寻找有效的方法来检查下一个运行时日期是否已经过去(简单部分),然后再次生成第一个下一个运行时日期。在这种情况下,它将是 .2015-07-16 2:102015-07-17 2:10

我发现我们的大脑很容易胜任这项任务,但我不确定要遵循哪些逻辑步骤才能以最有效的方式确定这一点(无需写出所有的可能性)。

有什么建议吗?


答案 1

它工作正常。我正在使用PHP Cron Parser。它有我们需要的一切。

否则,您可以更轻松,更有效地使用Cron表达式。一些参考答案已经在这里和堆栈溢出中。

对于 Cron 表达式,您可以使用:

$cron = Cron\CronExpression::factory('@daily');
$cron->isDue();
echo $cron->getNextRunDate()->format('Y-m-d H:i:s');//this give next run date.
//echo $cron->getPreviousRunDate()->format('Y-m-d H:i:s');//this give previous run date.

这与你拥有的完全相同,Cron Expression也拥有,

enter image description here

您需要做的就是使用PHP Cron Expression。希望这有帮助。


答案 2

这几乎是Cron语法,那么为什么要创建一些完全相同工作的东西呢?

切换到有效的cron语法并使用简单的库进行解析等应该很容易。

例如,https://github.com/mtdowling/cron-expression,您可以在其中免费获取下一个运行日期:

$cron->getNextRunDate()->format('Y-m-d H:i:s');

您还可以使用 0/15 等值每 15 分钟运行一次,等等。另一个好处是,cron语法是常识,可以防止对格式的误解。


推荐