- Notifications
You must be signed in to change notification settings - Fork1
Cron expression generator built on php8
License
NotificationsYou must be signed in to change notification settings
butschster/CronExpressionGenerator
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Cron expression generator is a beautiful tool for PHP applications. Of course, the primary feature of this package is the ability to generate cron expressions.
- Cron expressions generator
- Pre built expressions
- Custom expressions
- Well documented
- Well tested
- Compatible with Laravel
- PHP 8.0 and above
You can install the package via composer:
composer require butschster/cron-expression-generator
That's it!
useButschster\CronExpression\Generator;useCron\CronExpression;$generator =newGenerator();// or$generator =newGenerator(newCronExpression('* * * * *'));// or$generator = Generator::create();// or$generator = Generator::create(newCronExpression('* * * * *'));
$expression =$generator->getExpression();// \Cron\CronExpression
echo$generator->toExpression();// * * * * *echo (string)$generator;// * * * * *echo (string)$generator->getExpression();// * * * * *echo$generator->getExpression()->getExpression();// * * * * *
echo$generator->cron('* */3 * * *');// * */3 * * *echo$generator->cron('* */3 * * *')->everyTwoMinutes();// */2 */3 * * *
// Every minuteecho$generator->everyMinute();// * * * * *// Every even minuteecho$generator->everyEvenMinute();// */2 * * * *// Every two minutesecho$generator->everyTwoMinutes();// */2 * * * *// Every three minutesecho$generator->everyThreeMinutes();// */3 * * * *// Every four minutesecho$generator->everyFourMinutes();// */4 * * * *// Every five minutesecho$generator->everyFiveMinutes();// */5 * * * *// Every ten minutesecho$generator->everyTenMinutes();// */10 * * * *// Every fifteen minutesecho$generator->everyFifteenMinutes();// */15 * * * *// Every 00 and 30 minutesecho$generator->everyThirtyMinutes();// 0,30 * * * *// Every minuteecho$generator->set(new \Butschster\CronExpression\Parts\Minutes\EveryMinute());// * * * * *echo$generator->set(new \Butschster\CronExpression\Parts\Minutes\EveryMinute(2));// * */2 * * *// Specific minutesecho$generator->set(new \Butschster\CronExpression\Parts\Minutes\SpecificMinutes(2,3,10));// * 2,3,10 * * *// Between minutesecho$generator->set(new \Butschster\CronExpression\Parts\Minutes\BetweenMinutes(0,30));// * 0-30 * * *
// Every hour at 00 minutesecho$generator->hourly();// 0 * * * *// Every hour at 15 minutesecho$generator->hourlyAt(15);// 15 * * * *// Every hour at 15, 30, 45 minutesecho$generator->hourlyAt(15,30,45);// 15,30,45 * * * *// Every two hoursecho$generator->everyTwoHours();// 0 */2 * * *// Every three hoursecho$generator->everyThreeHours();// 0 */3 * * *// Every four hoursecho$generator->everyFourHours();// 0 */4 * * *// Every six hoursecho$generator->everySixHours();// 0 */6 * * *// Every 1, 2, 3 hoursecho$generator->set(new \Butschster\CronExpression\Parts\Hours\SpecificHours(1,2,3));// * 1,2,3 * * *// Every three hoursecho$generator->set(new \Butschster\CronExpression\Parts\Hours\EveryHour());// * * * * *echo$generator->set(new \Butschster\CronExpression\Parts\Hours\EveryHour(3));// * */3 * * *// Between hoursecho$generator->set(new \Butschster\CronExpression\Parts\Hours\BetweenHours(0,12));// * 0-12 * * *
// Every day at 00:00echo$generator->daily();// 0 0 * * *// Every day at 01:00echo$generator->daily(1);// 0 1 * * *// Every day at 03:00, 15:00, 23:00echo$generator->daily(3,15,23);// 0 3,15,23 * * *// Every day at 13:00echo$generator->dailyAt(13);// 0 13 * * *// Every day at 13:25echo$generator->dailyAt(13,25);// 25 13 * * *// Every day at 03:00, 15:00echo$generator->twiceDaily(3,15);// 0 3,15 * * *// Every day at 03:05, 15:05echo$generator->twiceDailyAt(3,15,5);// 5 3,15 * * *// Every month on the last day at 00:00echo$generator->lastDayOfMonth();// 0 0 L * *// Every month on the last day at 12:00echo$generator->lastDayOfMonth(12);// 0 12 L * *// Every month on the last day at 12:30echo$generator->lastDayOfMonth(12,30);// 30 12 L * *// Every month on the last weekday at 00:00echo$generator->lastWeekdayOfMonth();// 0 0 LW * *// Every month on the last weekday at 12:00echo$generator->lastWeekdayOfMonth(12);// 0 12 LW * *// Every month on the last weekday at 12:30echo$generator->lastWeekdayOfMonth(12,30);// 30 12 LW * *// Every 1, 2, 3 daysecho$generator->set(new \Butschster\CronExpression\Parts\Days\SpecificDays(1,2,3));// * * 1,2,3 * *echo$generator->set(new \Butschster\CronExpression\Parts\Days\EveryDay());// * * * * *// Every three daysecho$generator->set(new \Butschster\CronExpression\Parts\Days\EveryDay(3));// * * */3 * *// Between daysecho$generator->set(new \Butschster\CronExpression\Parts\Days\BetweenDays(0,12));// * * 0-12 * *// Last day of monthecho$generator->set(new \Butschster\CronExpression\Parts\Days\LastDayOfMonth());// * * L * *
// Every week on mondayecho$generator->weekly();// 0 0 * * 0// Every week on monday and thursdayecho$generator->weekly(Generator::MONDAY, Generator::THURSDAY);// 0 0 * * 1,4// Every week on weekdaysecho$generator->daily()->weekdays();// 0 0 * * 1-5// Every week on weekendsecho$generator->daily()->weekends();// 0 0 * * 6,0// Every mondayecho$generator->daily()->mondays();// 0 0 * * 1// orecho$generator->weeklyOnMonday();// orecho$generator->weeklyOnMonday(8,6);// 6 8 * * 1// Every tuesdayecho$generator->daily()->tuesdays();// 0 0 * * 2// orecho$generator->weeklyOnTuesday();// Every wednesdayecho$generator->daily()->wednesdays();// 0 0 * * 3// orecho$generator->weeklyOnWednesday();// Every thursdayecho$generator->daily()->thursdays();// 0 0 * * 4// orecho$generator->weeklyOnThursday();// Every fridayecho$generator->daily()->fridays();// 0 0 * * 5// orecho$generator->weeklyOnFriday();// Every saturdayecho$generator->daily()->saturdays();// 0 0 * * 6// orecho$generator->weeklyOnSaturday();// Every sundayecho$generator->daily()->sundays();// 0 0 * * 0// orecho$generator->weeklyOnSunday();// Every mondayecho$generator->weeklyOn(Generator::MONDAY);// 0 0 * * 1// Every monday at 8amecho$generator->weeklyOn(Generator::MONDAY,8);// 0 8 * * 1// Every monday at 08:06echo$generator->weeklyOn(Generator::MONDAY,8,6);// 6 8 * * 1// Every day of a weekecho$generator->set(new \Butschster\CronExpression\Parts\DaysOfWeek\EveryDayOfWeek());// * * * * *// Every two days of a weekecho$generator->set(new \Butschster\CronExpression\Parts\DaysOfWeek\EveryDayOfWeek(2));// * * * * */2// Every Monday,Wednesday, Fridayecho$generator->set(new \Butschster\CronExpression\Parts\DaysOfWeek\SpecificDaysOfWeek(Generator::MONDAY, Generator::WEDNESDAY, Generator::FRIDAY));// * * * * 1,3,5// Between days of a weekecho$generator->set(new \Butschster\CronExpression\Parts\DaysOfWeek\BetweenDayOfWeek(Generator::MONDAY, Generator::FRIDAY));// * * * * 1-5// Last monday of a weekecho$generator->set(new \Butschster\CronExpression\Parts\DaysOfWeek\LastDayOfWeek());// * * * * 1L// Last friday of a weekecho$generator->set(new \Butschster\CronExpression\Parts\DaysOfWeek\LastDayOfWeek(Generator::FRIDAY));// * * * * 5L// Every first monday of every monthecho$generator->set(new \Butschster\CronExpression\Parts\DaysOfWeek\NthDayOfWeek());// * * * * 1#1// Every third friday of every monthecho$generator->set(new \Butschster\CronExpression\Parts\DaysOfWeek\NthDayOfWeek(Generator::FRIDAY,3));// * * * * 5#3
// Every month on 1-st day at 00:00echo$generator->monthly();// 0 0 1 * *// Every month on 1-st day at 12:00echo$generator->monthly(12);// 00 12 1 * *// Every month on 1-st day at 12:30echo$generator->monthly(12,30);// 30 12 1 * *// Every month on 15-st day at 12:00echo$generator->monthlyOn(15,12);// 0 12 15 * *// Every month on 15-st day at 12:30echo$generator->monthlyOn(15,12,30);// 30 12 15 * *// Every month two times on 15, 24 day at 00:00echo$generator->twiceMonthly(15,24);// 0 0 15,24 * *// Every month two times on 15, 24 day at 10:00echo$generator->twiceMonthly(15,24,10);// 0 10 15,24 * *// Every month two times on 15, 24 day at 10:30echo$generator->twiceMonthly(15,24,10,30);// 30 10 15,24 * *// Every month three times on 12, 24, 30 day at 10:345echo$generator->dailyAt(10,45)->daysOfMonth(12,24,30);// 45 10 12,24,30 * *// Every quarter yyyy-01,03,06,09-01 00:00echo$generator->quarterly();// 0 0 1 1-12/3 *// Every year yyyy-01-01 00:00echo$generator->yearly();// 0 0 1 1 *// Every year yyyy-04-01 00:00echo$generator->yearlyOn(Generator::APR);// 0 0 1 4 *// Every year yyyy-04-05 00:00echo$generator->yearlyOn(Generator::APR,5);// 0 0 5 4 *// Every year yyyy-04-05 08:00echo$generator->yearlyOn(Generator::APR,5,8);// 0 8 5 4 *// Every year yyyy-04-05 08:30echo$generator->yearlyOn(Generator::APR,5,8,30);// 30 8 5 4 *// Every monthecho$generator->set(new \Butschster\CronExpression\Parts\Months\EveryMonth());// * * * * *// Every two monthsecho$generator->set(new \Butschster\CronExpression\Parts\Months\EveryMonth(2));// * * * */2 *// Specific months: april and decemberecho$generator->set(new \Butschster\CronExpression\Parts\Months\SpecificMonths(Generator::APR, Generator::DEC));// * * * 4,12 *// Between april and decemberecho$generator->set(new \Butschster\CronExpression\Parts\Months\BetweenMonths(Generator::APR, Generator::DEC));// * * * 4-12 *// Quarterlyecho$generator->set(new \Butschster\CronExpression\Parts\Months\Quarterly());// * * * 1-12/3 *
$date =newDateTime('2021-02-05 12:34:26');// Every year yyyy-02-05 12:34echo$generator->on($date);// 34 12 5 2 *// orecho$generator->set(new \Butschster\CronExpression\Parts\DateTime($date));// 34 12 5 2 *
useButschster\CronExpression\Parts\Days\SpecificDays;useButschster\CronExpression\Parts\DaysOfWeek\SpecificDaysOfWeek;useButschster\CronExpression\Parts\Hours\EveryHour;useButschster\CronExpression\Parts\Minutes\EveryMinute;useButschster\CronExpression\Parts\Months\SpecificMonths;// * */2 5,10,15,20,25,30 3,6,9,12 1,3,5,0echo$generator ->yearly() ->months(Generator::MAR, Generator::JUN, Generator::SEP, Generator::DEC) ->daysOfMonth(5,10,15,20,25,30) ->daysOfWeek(Generator::MONDAY, Generator::WEDNESDAY, Generator::FRIDAY, Generator::SUNDAY) ->everyTwoHours() ->everyMinute();// orecho$generator ->set(newSpecificMonths(Generator::MAR, Generator::JUN, Generator::SEP, Generator::DEC),newSpecificDays(5,10,15,20,25,30),newSpecificDaysOfWeek(Generator::MONDAY, Generator::WEDNESDAY, Generator::FRIDAY, Generator::SUNDAY),newEveryHour(2),newEveryMinute() );
See:https://github.com/dragonmantank/cron-expression#usage
echo$generator->monthlyOn(15,12)->getExpression()->getNextRunDate();// DateTime
<?phpnamespaceApp\Console;useButschster\CronExpression\Generator;useIlluminate\Console\Scheduling\Schedule;useIlluminate\Foundation\Console\KernelasConsoleKernel;useIlluminate\Support\Facades\DB;class Kernelextends ConsoleKernel{protectedfunctionschedule(Schedule$schedule) {$schedule->command('emails:send Taylor --force')->cron( Generator::create()->daily() ); }}
To create a custom expression class you need implementButschster\CronExpression\PartValueInterface
useButschster\CronExpression\PartValueInterface;useCron\CronExpression;class Quarterlyimplements PartValueInterface{publicfunctionupdateExpression(CronExpression$expression):void {$expression->setPart(CronExpression::MONTH,'1-12/3'); }}
Using
echo \Butschster\CronExpression\Generator::create()->set(newQuarterly());// * * * 1-12/3 *
useButschster\CronExpression\Parts\Days\SpecificDays;useButschster\CronExpression\Parts\Hours\SpecificHours;useButschster\CronExpression\Parts\Minutes\SpecificMinutes;useButschster\CronExpression\Parts\Months\SpecificMonths;useButschster\CronExpression\PartValueInterface;useCron\CronExpression;useDateTimeInterface;class DateTimeimplements PartValueInterface{publicfunction__construct(privateDateTimeInterface$time) { }publicfunctionupdateExpression(CronExpression$expression):void {$parts = [newSpecificMinutes((int)$this->time->format('i')),newSpecificHours((int)$this->time->format('G')),newSpecificDays((int)$this->time->format('j')),newSpecificMonths((int)$this->time->format('n')) ];foreach ($partsas$part) {$part->updateExpression($expression); } }}
Using
echo \Butschster\CronExpression\Generator::create()->set(newDateTime(new \DateTime('2021-02-05 12:34:26')));// 34 12 5 2 *
composertest
The MIT License (MIT). Please seeLicense File for more information.
About
Cron expression generator built on php8