You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
3.6 KiB

3 years ago
  1. PHP Cron Expression Parser
  2. ==========================
  3. [![Latest Stable Version](https://poser.pugx.org/dragonmantank/cron-expression/v/stable.png)](https://packagist.org/packages/dragonmantank/cron-expression) [![Total Downloads](https://poser.pugx.org/dragonmantank/cron-expression/downloads.png)](https://packagist.org/packages/dragonmantank/cron-expression) [![Build Status](https://secure.travis-ci.org/dragonmantank/cron-expression.png)](http://travis-ci.org/dragonmantank/cron-expression) [![StyleCI](https://github.styleci.io/repos/103715337/shield?branch=master)](https://github.styleci.io/repos/103715337)
  4. The PHP cron expression parser can parse a CRON expression, determine if it is
  5. due to run, calculate the next run date of the expression, and calculate the previous
  6. run date of the expression. You can calculate dates far into the future or past by
  7. skipping **n** number of matching dates.
  8. The parser can handle increments of ranges (e.g. */12, 2-59/3), intervals (e.g. 0-9),
  9. lists (e.g. 1,2,3), **W** to find the nearest weekday for a given day of the month, **L** to
  10. find the last day of the month, **L** to find the last given weekday of a month, and hash
  11. (#) to find the nth weekday of a given month.
  12. More information about this fork can be found in the blog post [here](http://ctankersley.com/2017/10/12/cron-expression-update/). tl;dr - v2.0.0 is a major breaking change, and @dragonmantank can better take care of the project in a separate fork.
  13. Installing
  14. ==========
  15. Add the dependency to your project:
  16. ```bash
  17. composer require dragonmantank/cron-expression
  18. ```
  19. Usage
  20. =====
  21. ```php
  22. <?php
  23. require_once '/vendor/autoload.php';
  24. // Works with predefined scheduling definitions
  25. $cron = new Cron\CronExpression('@daily');
  26. $cron->isDue();
  27. echo $cron->getNextRunDate()->format('Y-m-d H:i:s');
  28. echo $cron->getPreviousRunDate()->format('Y-m-d H:i:s');
  29. // Works with complex expressions
  30. $cron = new Cron\CronExpression('3-59/15 6-12 */15 1 2-5');
  31. echo $cron->getNextRunDate()->format('Y-m-d H:i:s');
  32. // Calculate a run date two iterations into the future
  33. $cron = new Cron\CronExpression('@daily');
  34. echo $cron->getNextRunDate(null, 2)->format('Y-m-d H:i:s');
  35. // Calculate a run date relative to a specific time
  36. $cron = new Cron\CronExpression('@monthly');
  37. echo $cron->getNextRunDate('2010-01-12 00:00:00')->format('Y-m-d H:i:s');
  38. ```
  39. CRON Expressions
  40. ================
  41. A CRON expression is a string representing the schedule for a particular command to execute. The parts of a CRON schedule are as follows:
  42. * * * * *
  43. - - - - -
  44. | | | | |
  45. | | | | |
  46. | | | | +----- day of week (0 - 7) (Sunday=0 or 7)
  47. | | | +---------- month (1 - 12)
  48. | | +--------------- day of month (1 - 31)
  49. | +-------------------- hour (0 - 23)
  50. +------------------------- min (0 - 59)
  51. This library also supports a few macros:
  52. * `@yearly`, `@annually` - Run once a year, midnight, Jan. 1 - `0 0 1 1 *`
  53. * `@monthly` - Run once a month, midnight, first of month - `0 0 1 * *`
  54. * `@weekly` - Run once a week, midnight on Sun - `0 0 * * 0`
  55. * `@daily` - Run once a day, midnight - `0 0 * * *`
  56. * `@hourly` - Run once an hour, first minute - `0 * * * *`
  57. Requirements
  58. ============
  59. - PHP 7.1+
  60. - PHPUnit is required to run the unit tests
  61. - Composer is required to run the unit tests
  62. Projects that Use cron-expression
  63. =================================
  64. * Part of the [Laravel Framework](https://github.com/laravel/framework/)
  65. * Available as a [Symfony Bundle - setono/cron-expression-bundle](https://github.com/Setono/CronExpressionBundle)
  66. * Framework agnostic, PHP-based job scheduler - [Crunz](https://github.com/lavary/crunz)