carlossosa88/cron-expression

PHP 的 CRON:计算下一个或上一个运行日期,并确定 CRON 表达式是否到期

v2.3.0-p2 2019-09-16 15:07 UTC

This package is auto-updated.

Last update: 2024-09-17 02:27:42 UTC


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 的项目