На початку нового року багато з нас ставлять собі повторювані цілі: щоденні тренування, щотижневі наради або щомісячні рефлексії. Відстежувати ці зобов'язання може бути складно, але керувати ними програмно зовсім не обов'язково. Знайомтеся з 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.
Нова версія Livewire 4, представленої Келебом Порзіо на Laracon US 2025, обіцяє значні покращення у швидкості та організації компонентів. Які з інноваційних функцій підкорять ваше серце? Читайте далі, щоб дізнатися більше про те, як Livewire 4 полегшить вашу роботу
Використання Vite для створення фронтенд-ресурсів у вашому додатку Laravel може бути захоплюючим, але іноді ви можете стикнутися з певними помилками. У цій статті ми розглянемо чотири поширені помилки, з якими ви можете зіткнутися, а також підкажемо способи їх усунення, щоб ви могли знову зосередитися на розробці вашого додатку
Досліджуйте нові можливості локалізації вашого Laravel-додатку з пакунками, які використовують штучний інтелект, такими як ChatGPT та Claude. Які рішення можуть спростити ваш процес перекладу та зробити його більш точним? Читайте далі, щоб дізнатися більше!