Recurr is a PHP library for working with recurrence rules for calendar dates

https://picperf.io/https://laravelnews.s3.amazonaws.com/featured-images/Recurr.png

Recurr is a PHP library for working with recurrence rules for calendar dates

As the new year begins, many of us set recurring goals—daily workouts, weekly meetings, or monthly reflections. Tracking these commitments in life can be tricky, but managing them programmatically doesn’t have to be. Enter Recurr, a powerful PHP library created by Shaun Simmons which is designed to handle recurrence rules (RRULE) with ease. Whether you’re scheduling weekly reminders, monthly events, or anything in between, Recurr simplifies the complexities of recurring dates so you can focus on building your application.

To install Recurr use composer.

composer require simshaun/recurr

Then, in your PHP code, you can instantiate the \Recurr\Rule class:

$timezone = 'America/Jamaica';
$startDate = new \DateTime('2025-01-1 10:00:00', new \DateTimeZone($timezone));
$endDate = new \DateTime('2025-02-12 10:00:00', new \DateTimeZone($timezone)); // Optional
$rule = new \Recurr\Rule('FREQ=WEEKLY;COUNT=6', $startDate, $endDate, $timezone);

echo $rule->getString(); 
//output: FREQ=WEEKLY;COUNT=6;DTEND=20250212T100000

You can also rewrite the above by chaining methods together for better readability:

$rule = (new \Recurr\Rule)
    ->setStartDate($startDate)
    ->setTimezone($timezone)
    ->setFreq('WEEKLY')
    ->setCount(6)
    ->setUntil($endDate);

Once you have a recurrence rule, you can take it a step further by transforming it into human-readable text:

$transformer = new \Recurr\Transformer\TextTransformer();
echo $transformer->transform($rule);
//output: weekly on Wednesday for 6 times

If you need the actual PHP DateTime objects representing the recurrence dates, use the ArrayTransformer class along with the getStart() or getEnd() methods:

$transformer = new \Recurr\Transformer\ArrayTransformer();
$dates = $transformer->transform($rule);

foreach ($dates as $date) {
    echo $date->getStart()->format('Y-m-d H:i:s') . PHP_EOL;
}

/*
output:

2025-01-01 10:00:00
2025-01-08 10:00:00
2025-01-15 10:00:00
2025-01-22 10:00:00
2025-01-29 10:00:00
2025-02-05 10:00:00
2025-02-12 10:00:00
*/

You can also specify the days of the week for the recurrence using the setByDay() method:

$rule = (new \Recurr\Rule)
    ->setStartDate($startDate)
    ->setTimezone($timezone)
    ->setFreq('WEEKLY')
->setByDay(['WE','FR'])
    ->setCount(6)
    ->setUntil($endDate);

$transformer = new \Recurr\Transformer\TextTransformer();
echo $transformer->transform($rule) . PHP_EOL;

//output: weekly on Wednesday and Friday until February 12, 2025

Recurr also provides advanced features like setting constraints to include or exclude specific dates, applying post-transformation filters, and defining custom intervals.

To explore more about this library and its capabilities, visit the source code on Github.


The post Recurr is a PHP library for working with recurrence rules for calendar dates appeared first on Laravel News.

Join the Laravel Newsletter to get all the latest
Laravel articles like this directly in your inbox.

Laravel News