Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Cron expression generator built on php8

License

NotificationsYou must be signed in to change notification settings

butschster/CronExpressionGenerator

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.

Support me on PatreonLatest Version on PackagistGitHub Tests Action StatusGitHub Code Style Action StatusTotal Downloads

Cron expresssion

Features

  • Cron expressions generator
  • Pre built expressions
  • Custom expressions
  • Well documented
  • Well tested
  • Compatible with Laravel

Requirements

  • PHP 8.0 and above

Installation

You can install the package via composer:

composer require butschster/cron-expression-generator

That's it!

Usage

Creates a new generator

useButschster\CronExpression\Generator;useCron\CronExpression;$generator =newGenerator();// or$generator =newGenerator(newCronExpression('* * * * *'));// or$generator = Generator::create();// or$generator = Generator::create(newCronExpression('* * * * *'));

Gets expression object

$expression =$generator->getExpression();// \Cron\CronExpression

Converts expression to a string

echo$generator->toExpression();// * * * * *echo (string)$generator;// * * * * *echo (string)$generator->getExpression();// * * * * *echo$generator->getExpression()->getExpression();// * * * * *

Sets specific cron expression

echo$generator->cron('* */3 * * *');// * */3 * * *echo$generator->cron('* */3 * * *')->everyTwoMinutes();// */2 */3 * * *

Manipulate minutes

// 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 * * *

Manipulate hours

// 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 * * *

Manipulate days

// 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 * *

Manipulate days of week

// 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

Manipulate months

// 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 *

Specific time

$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 *

Custom expression

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()    );

Gets next run date

See:https://github.com/dragonmantank/cron-expression#usage

echo$generator->monthlyOn(15,12)->getExpression()->getNextRunDate();// DateTime

Using with laravel

<?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()        );    }}

Create custom expressions

To create a custom expression class you need implementButschster\CronExpression\PartValueInterface

Example 1

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 *

Example 2

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 *

Testing

composertest

Credits

License

The MIT License (MIT). Please seeLicense File for more information.


[8]ページ先頭

©2009-2025 Movatter.jp