Recurr — це бібліотека PHP для роботи з правилами повторення календарних дат

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 09 січня, 2025
З новим роком приходять нові цілі, але як ефективно їх відстежувати? У статті розглядається бібліотека PHP Recurr, яка спрощує управління повторюваними подіями завдяки простим правилам і зрозумілому коду, що дозволяє зосередитися на розробці вашого веб-додатка. Дізнайтеся більше про цю потужну бібліотеку!

На початку нового року багато з нас ставлять собі повторювані цілі: щоденні тренування, щотижневі наради або щомісячні рефлексії. Відстежувати ці зобов'язання може бути складно, але керувати ними програмно зовсім не обов'язково. Знайомтеся з Recurr – потужною PHP-бібліотекою, створеною Шоном Сіммонсом, яка спрощує роботу з правилами повторювання (RRULE). Незалежно від того, чи плануєте ви щотижневі нагадування, щомісячні події чи щось інше, Recurr спростить управління повторюваними датами, що дозволить вам зосередитися на розробці вашого додатку.

Щоб встановити Recurr, використайте Composer:

composer require simshaun/recurr

Далі, у вашому PHP-коді, ви можете створити екземпляр класу \Recurr\Rule:

$timezone = 'America/Jamaica';
$startDate = new \DateTime('2025-01-01 10:00:00', new \DateTimeZone($timezone));
$endDate = new \DateTime('2025-02-12 10:00:00', new \DateTimeZone($timezone)); // Необов'язково
$rule = new \Recurr\Rule('FREQ=WEEKLY;COUNT=6', $startDate, $endDate, $timezone);

echo $rule->getString();
// вивід: FREQ=WEEKLY;COUNT=6;DTEND=20250212T100000

Ви також можете записати це, комбінуючи методи для кращої читабельності:

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

Після створення правила повторення ви можете перетворити його в зрозумілий текст:

$transformer = new \Recurr\Transformer\TextTransformer();
echo $transformer->transform($rule);
// вивід: щотижня у середу, 6 разів

Якщо вам потрібно отримати реальні об'єкти DateTime, які представляють дати повторення, скористайтеся класом ArrayTransformer разом із методами getStart() або getEnd():

$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;
}

/*
вивід:

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

Також можна вказати дні тижня для повторення, використавши метод setByDay():

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

// вивід: щотижня у середу та п’ятницю до 12 лютого 2025 року

Recurr також пропонує просунуті можливості, такі як встановлення обмежень для включення чи виключення конкретних дат, застосування фільтрів після трансформації та визначення власних інтервалів.

Щоб дізнатися більше про цю бібліотеку та її можливості, відвідайте репозиторій на GitHub.

Популярні

Logomark Logotype

Усе, що нам відомо про Livewire 4

Нова версія Livewire 4, представленої Келебом Порзіо на Laracon US 2025, обіцяє значні покращення у швидкості та організації компонентів. Які з інноваційних функцій підкорять ваше серце? Читайте далі, щоб дізнатися більше про те, як Livewire 4 полегшить вашу роботу

Logomark Logotype

4 поширені помилки Vite у Laravel

Використання Vite для створення фронтенд-ресурсів у вашому додатку Laravel може бути захоплюючим, але іноді ви можете стикнутися з певними помилками. У цій статті ми розглянемо чотири поширені помилки, з якими ви можете зіткнутися, а також підкажемо способи їх усунення, щоб ви могли знову зосередитися на розробці вашого додатку

Logomark Logotype

Використання штучного інтелекту для управління перекладами в Laravel

Досліджуйте нові можливості локалізації вашого Laravel-додатку з пакунками, які використовують штучний інтелект, такими як ChatGPT та Claude. Які рішення можуть спростити ваш процес перекладу та зробити його більш точним? Читайте далі, щоб дізнатися більше!