adhocore/cron-expr

PHP的超轻量级Cron表达式解析器

1.1.3 2021-10-20 07:43 UTC

This package is auto-updated.

Last update: 2024-08-24 16:59:56 UTC


README

Latest Version Travis Build Scrutinizer CI Codecov branch StyleCI Software License Tweet Support

  • PHP的轻量级Cron表达式解析库。
  • 无依赖。
  • 非常 快速,因为它在某个部分不匹配时会立即退出。
  • 真实 基准测试 显示它比 dragonmantank/cron-expression 快约 7.54x 到 12.92x。

安装

composer require adhocore/cron-expr

# PHP5.6 or lower
composer require adhocore/cron-expr:0.1.0

使用方法

基本

use Ahc\Cron\Expression;
use Ahc\Cron\Normalizer;

Expression::isDue('@always');
Expression::isDue(Normalizer::HOURLY, '2015-01-01 00:00:00');
Expression::isDue('*/20 * * * *', new DateTime);
Expression::isDue('5-34/4 * * * *', time());

// Dont like static calls? Below is possible too!
$expr = new Expression;
$expr->isCronDue('*/1 * * * *', time());

批量检查

在同时检查多个任务时,如果多个任务具有等效的表达式,则评估只进行一次,从而大大提高性能。

use Ahc\Cron\Expression;

$jobs = [
    'job1' => '*/2 */2 * * *',
    'job1' => '* 20,21,22 * * *',
    'job3' => '7-9 * */9 * *',
    'job4' => '*/5 * * * *',
    'job5' => '@5minutes',     // equivalent to job4 (so it is due if job4 is due)
    'job6' => '7-9 * */9 * *', // exact same as job3 (so it is due if job3 is due)
];

// The second param $time can be used same as above: null/time()/date string/DateTime
$dues = Expression::getDues($jobs, '2015-08-10 21:50:00');
// ['job1', 'job4', 'job5']

// Dont like static calls? Below is possible too!
$expr = new Expression;
$dues = $expr->filter($jobs, time());

Cron表达式

Cron表达式通常由5个部分组成,即

<minute> <hour> <day> <month> <weekday>

有时在末尾还可以有第六部分用于<year>

真实缩写

您可以使用月份和星期的真实缩写,例如:JANdecfriSUN

标签

以下标签可用,并在解析之前将它们转换为真实Cron表达式

  • @yearly@annually - 每年
  • @monthly - 每月
  • @daily - 每天
  • @weekly - 每周
  • @hourly - 每小时
  • @5minutes - 每五分钟
  • @10minutes - 每十分钟
  • @15minutes - 每十五分钟
  • @30minutes - 每三十分钟
  • @always - 每分钟

您可以使用来自 Ahc\Cron\Normalizer 的常量来引用它们,例如 Ahc\Cron\Normalizer::WEEKLY

修饰符

支持以下修饰符

  • 月份中的某天 / 第3部分
    • L 表示月份的最后一天(例如:在闰年中,L 可以表示2月的29日)
    • W 表示最接近的星期几(例如:10W 是最接近的星期一至星期五到10日的日期)
  • 星期几 / 第5部分
    • L 表示月份的最后工作日(例如:2L 是最后一个星期一)
    • # 表示月份中第n个工作日(例如:1#2 是第二个星期日)

LICENSE

© MIT | 2017-2019, Jitendra Adhikari

致谢

此项目由 please 管理发布。