Laravel Packages

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

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

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.

Yannick Lyn Fatt photo

Staff Writer at Laravel News and Full stack web developer.

Sponsored

masteringlaravel logo
Laravel Code Review

Get expert guidance in a few days with a Laravel code review

Visit Laravel Code Review

The latest

View all →
Image Dominant Color and HEIC Support in Laravel 13.24 image

Image Dominant Color and HEIC Support in Laravel 13.24

Read article
Official Laravel Zed Extension: LSP for PHP & Blade image

Official Laravel Zed Extension: LSP for PHP & Blade

Read article
Laravel Head: Manage Meta Tags, Open Graph, and JSON-LD image

Laravel Head: Manage Meta Tags, Open Graph, and JSON-LD

Read article
PhpStorm 2026.2 Released image

PhpStorm 2026.2 Released

Read article
Laravel Doctor: Diagnose Your App With One Artisan Command image

Laravel Doctor: Diagnose Your App With One Artisan Command

Read article
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article