Ultra lightweight Cron Expression parser for PHP
- Lightweight Cron expression parser library for PHP.
- Zero dependency.
- Very fast because it bails early in case a segment doesnt match.
- Real benchmark shows it is about 7.54x to 12.92x faster than
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());
When checking for several jobs at once, if more than one of the jobs share equivalent expression then the evaluation is done only once per go thus greatly improving performnce.
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 expression normally consists of 5 segments viz:
<minute> <hour> <day> <month> <weekday>
and sometimes there can be 6th segment for
<year> at the end.
You can use real abbreviations for month and week days. eg:
Following tags are available and they are converted to real cron expressions before parsing:
- @yearly or @annually - every year
- @monthly - every month
- @daily - every day
- @weekly - every week
- @hourly - every hour
- @5minutes - every 5 minutes
- @10minutes - every 10 minutes
- @15minutes - every 15 minutes
- @30minutes - every 30 minutes
- @always - every minute
You can refer them with constants from
Following modifiers supported
- Day of Month / 3rd segment:
Lstands for last day of month (eg:
Lcould mean 29th for February in leap year)
Wstands for closest week day (eg:
10Wis closest week days (MON-FRI) to 10th date)
- Day of Week / 5th segment:
Lstands for last weekday of month (eg:
2Lis last monday)
#stands for nth day of week in the month (eg:
1#2is second sunday)
© MIT | 2017-2019, Jitendra Adhikari
This project is release managed by please.