carlossosa88 / cron-expression
PHP 的 CRON:计算下一个或上一个运行日期,并确定 CRON 表达式是否到期
v2.3.0-p2
2019-09-16 15:07 UTC
Requires
- php: ^7.1
Requires (Dev)
- phpstan/phpstan: ^0.11
- phpunit/phpunit: ^6.4|^7.0
README
这是一个从 dragonmantank/cron-expression 分支出来的版本,增加了对秒的非标准表达式的支持。主要用于 Fcron 对秒的调度支持。
安装
将依赖项添加到您的项目中
composer require carlossosa88/cron-expression
用法
<?php require_once '/vendor/autoload.php'; // Works with predefined scheduling definitions $cron = Cron\CronExpression::factory('@daily'); $cron->isDue(); echo $cron->getNextRunDate()->format('Y-m-d H:i:s'); echo $cron->getPreviousRunDate()->format('Y-m-d H:i:s'); // Works with complex expressions $cron = Cron\CronExpression::factory('3-59/15 6-12 */15 1 2-5'); echo $cron->getNextRunDate()->format('Y-m-d H:i:s'); // Calculate a run date two iterations into the future $cron = Cron\CronExpression::factory('@daily'); echo $cron->getNextRunDate(null, 2)->format('Y-m-d H:i:s'); // Calculate a run date relative to a specific time $cron = Cron\CronExpression::factory('@monthly'); echo $cron->getNextRunDate('2010-01-12 00:00:00')->format('Y-m-d H:i:s');
用法(秒)
<?php // Run a task every 5 seconds $e = CronExpression::factory('* * * * * */5'); $this->assertTrue( $e->isDue( new DateTime('2014-04-07 00:00:05'), // Instance of datetime or 'now' null, // Time zone false // Drop seconds? Drop seconds parameter have to be set to FALSE, otherwise the default behavior is to reset to 0 current seconds ) ); // Run a task on seconds 0,5,10,20 $e = CronExpression::factory('* * * * * 0,5,10,20'); $this->assertSame('2018-04-07 00:00:20', $e->getNextRunDate('2018-04-07 00:00:13', 0, false, null, false) ->format('Y-m-d H:i:s') );
CRON 表达式
CRON 表达式是一个字符串,表示特定命令的执行计划。CRON 调度的各个部分如下
* * * * * *
- - - - - -
| | | | | |
| | | | | +- seconds (0 - 59)
| | | | +------ day of week (0 - 7) (Sunday=0 or 7)
| | | +----------- month (1 - 12)
| | +---------------- day of month (1 - 31)
| +--------------------- hour (0 - 23)
+-------------------------- min (0 - 59)
此库还支持一些宏
@yearly
,@annually
- 每年运行一次,午夜,1月1日 -0 0 1 1 *
@monthly
- 每月运行一次,午夜,月初 -0 0 1 * *
@weekly
- 每周运行一次,周日午夜 -0 0 * * 0
@daily
- 每天运行一次,午夜 -0 0 * * *
@hourly
- 每小时运行一次,第一分钟 -0 * * * *
要求
- PHP 7.1+
- 需要 PHPUnit 来运行单元测试
- 需要 Composer 来运行单元测试
使用 cron-expression 的项目
- Laravel 框架的一部分 Laravel Framework
- 可作为 Symfony Bundle - setono/cron-expression-bundle 使用