PHP code example of bakame / cron
1. Go to this page and download the library: Download bakame/cron library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
bakame / cron example snippets
use Bakame\Cron\Scheduler;
use Bakame\Cron\Expression;
Expression::registerAlias('@every_half_hour', '*/30 * * * *');
$scheduler = Scheduler::fromSystemTimezone('@every_half_hour');
$scheduler->isDue('2022-03-15 14:30:01'); // returns true
$scheduler->isDue('2022-03-15 14:29:59'); // returns false
$runs = $scheduler->yieldRunsBetween(new DateTime('2019-10-10 23:29:25'), '2019-10-11 01:30:25');
var_export(array_map(
fn (DateTimeImmutable $d): string => $d->format('Y-m-d H:i:s'),
iterator_to_array($runs, false)
));
// array (
// 0 => '2019-10-10 23:30:00',
// 1 => '2019-10-11 00:00:00',
// 2 => '2019-10-11 00:30:00',
// 3 => '2019-10-11 01:00:00',
// 4 => '2019-10-11 01:30:00',
// )
use Bakame\Cron\Expression;
use Bakame\Cron\Scheduler;
use Bakame\Cron\DatePresence;
TC';
$scheduler1 = new Scheduler(Expression::fromString($expression), new DateTimeZone($timezone), DatePresence::INCLUDED);
$scheduler2 = new Scheduler($expression, $timezone, DatePresence::INCLUDED);
$scheduler3 = Scheduler::fromUTC($expression, DatePresence::INCLUDED);
//all these instantiated object are equals.
$scheduler = Scheduler::fromSystemTimezone(Expression::fromString('* * * * MON#1'));
$scheduler->isDue(new DateTime('2014-04-07 00:00:00')); // returns true
$scheduler->isDue('NOW'); // returns false
$scheduler = new Scheduler('@daily', 'Africa/Kigali', DatePresence::EXCLUDED);
$run = $scheduler->run(new Carbon\CarbonImmutable('now'));
echo $run->format('Y-m-d H:i:s, e'), PHP_EOL;
//display 2021-12-29 00:00:00, Africa/Kigali
echo $run::class;
//display Carbon\CarbonImmutable
$scheduler = new Scheduler(Expression::fromString('@daily'), 'Africa/Kigali', DatePresence::EXCLUDED);
echo $scheduler->run('now', 3)->format('Y-m-d H:i:s, e'), PHP_EOL;
//display 2022-01-01 00:00:00, Africa/Kigali
$scheduler = new Scheduler(Expression::fromString('@daily'), 'Africa/Kigali', DatePresence::EXCLUDED);
echo $scheduler->run('2022-01-01 00:00:00', -2)->format('Y-m-d H:i:s, e'), PHP_EOL;
//display 2021-12-31 00:00:00, Africa/Kigali
$date = new DateTimeImmutable('2022-01-01 00:04:00', new DateTimeZone('Asia/Shanghai'));
$scheduler = new Scheduler('4-59/2 * * * *', 'Asia/Shanghai', DatePresence::EXCLUDED);
echo $scheduler->run($date)->format('Y-m-d H:i:s, e'), PHP_EOL;
//display 2022-01-01 00:06:00, Asia/Shanghai
echo $scheduler->
$scheduler = Scheduler::fromSystemTimezone('30 0 1 * 1')->0-10 23:20:00'), 5);
var_export(array_map(fn (DateTimeImmutable $d): string => $d->format('Y-m-d H:i:s'), iterator_to_array($runs, false)));
//returns
//array (
// 0 => '2019-10-14 00:30:00',
// 1 => '2019-10-21 00:30:00',
// 2 => '2019-10-28 00:30:00',
// 3 => '2019-11-01 00:30:00',
// 4 => '2019-11-04 00:30:00',
//)
$scheduler = Scheduler::fromSystemTimezone('30 0 1 * 1')->10-10 23:20:00'), 5);
$scheduler = Scheduler::fromSystemTimezone('30 0 1 * 1')-> new DateInterval('P1D'));
$scheduler = Scheduler::fromSystemTimezone('30 0 1 * 1')->, '1 DAY');
$scheduler = Scheduler::fromSystemTimezone('30 0 1 * 1')->', '2019-09-09 00:30:00');
use Bakame\Cron\MonthField;
$field = new MonthField('JAN'); //!works
$field = new MonthField(23); //will throw a SyntaxError
$expression = new Expression(
new MinuteField('3-59/15'),
new HourField('6-12'),
new DayOfMonthField('*/15'),
new MonthField('1'),
new DayOfWeekField('2-5'),
);
$expression->toString(); // display 3-59/15 6-12 */15 1 2-5
// At every 15th minute from 3 through 59 past
// every hour from 6 through 12
// on every 15th day-of-month
// if it's on every day-of-week from Tuesday through Friday
// in January.
use Bakame\Cron\Expression;
$cron = Expression::fromString('3-59/15 6-12 */15 1 2-5');
echo $cron->toString(); //displays '33-59/15 6-12 */15 1 2-5'
echo $cron->minute->toString(); //displays '3-59/15'
echo $cron->hour->toString(); //displays '6-12'
echo $cron->dayOfMonth->toString(); //displays '*/15'
echo $cron->month->toString(); //displays '1'
echo $cron->dayOfWeek->toString(); //displays '2-5'
var_export($cron->toFields());
// returns
// array (
// 'minute' => '3-59/15',
// 'hour' => '6-12',
// 'dayOfMonth' => '*/15',
// 'month' => '1',
// 'dayOfWeek' => '2-5',
// )
use Bakame\Cron\Expression;
$cron = Expression::fromFields(['minute' => 7, 'dayOfWeek' => '5']);
echo $cron->toString(); //displays '7 * * * 5'
echo $cron->minute->toString(); //displays '7'
echo $cron->hour->toString(); //displays '*'
echo $cron->dayOfMonth->toString(); //displays '*'
echo $cron->month->toString(); //displays '*'
echo $cron->dayOfWeek->toString(); //displays '5'
use Bakame\Cron\Expression;
$cron = Expression::fromString('3-59/15 6-12 */15 1 2-5');
echo $cron->minute->toString(); //display '3-59/15'
echo json_encode($cron->hour); //display '"6-12"'
echo $cron->toString(); //display '3-59/15 6-12 */15 1 2-5'
echo json_encode($cron); //display '"3-59\/15 6-12 *\/15 1 2-5"'
echo json_encode($cron->toFields()); //display '{"minute":"3-59\/15","hour":"6-12","dayOfMonth":"*\/15","month":"1","dayOfWeek":"2-5"}'
use Bakame\Cron\Expression;
$cron = Expression::fromString('3-59/15 6-12 */15 1 2-5');
echo $cron->withMinute('2')->toString(); //displays '2 6-12 */15 1 2-5'
echo $cron->withHour($cron->month)->toString(); //displays '3-59/15 1 */15 1 2-5'
echo $cron->withDayOfMonth(2)->toString(); //displays '3-59/15 6-12 2 1 2-5'
echo $cron->withMonth('2')->toString(); //displays '3-59/15 6-12 */15 2 2-5'
echo $cron->withDayOfWeek(2)->toString(); //displays '3-59/15 6-12 */15 1 2'
use Bakame\Cron\Expression;
echo Expression::fromString('@DaIlY')->toString(); // displays "0 0 * * *"
echo Expression::fromString('@DAILY')->toString(); // displays "0 0 * * *"
use Bakame\Cron\Expression;
use Bakame\Cron\Scheduler;
Expression::registerAlias('@every', '* * * * *');
Scheduler::fromUTC('@every')->run('TODAY', 2)->format('c');
// display 2022-01-08T00:03:00+00:00
use Bakame\Cron\Expression;
use Bakame\Cron\Scheduler;
if (!Expression::supportsAlias('@every')) {
Expression::registerAlias('@every', '* * * * *');
}
Expression::aliases();
// returns
// array (
// '@yearly' => '0 0 1 1 *',
// '@annually' => '0 0 1 1 *',
// '@monthly' => '0 0 1 * *',
// '@weekly' => '0 0 * * 0',
// '@daily' => '0 0 * * *',
// '@midnight' => '0 0 * * *',
// '@hourly' => '0 * * * *',
// '@every' => '* * * * *',
// )
Expression::supportsAlias('@foobar'); //return false
Expression::supportsAlias('@daily'); //return true
Expression::supportsAlias('@every'); //return true
Scheduler::fromUTC('@every'); // works!
Expression::unregisterAlias('@every'); //return true
Expression::unregisterAlias('@every'); //return false
Expression::supportsAlias('@every'); //return false
Scheduler::fromUTC('@every'); //throws SyntaxError unknown or unsupported expression
Expression::unregisterAlias('@daily'); //throws RegistrationError exception
bash
composer