laravel-czech-holidays maintained by nyoncode
Czech Holidays
České státní a ostatní svátky pro Laravel — data, názvy, výpočet Velikonoc a Artisan CLI.
Postaveno nad nyoncode/laravel-package-toolkit.
📖 Podrobná dokumentace je ve složce
docs/— instalace, použití a API, CLI, konfigurace, výpočet Velikonoc.
Instalace
composer require nyoncode/laravel-czech-holidays
Volitelně publikujte konfiguraci:
php artisan vendor:publish --tag="czech-holidays::config"
Balíček se registruje automaticky (package discovery). Fasáda Holidays je dostupná
bez ručního nastavení díky aliasu v composer.json.
Použití
use NyonCode\CzechHolidays\Facades\Holidays;
use Carbon\CarbonImmutable;
Holidays::isHoliday(CarbonImmutable::parse('2026-01-01')); // true
Holidays::isHoliday(CarbonImmutable::parse('2026-03-15')); // false
Holidays::name(CarbonImmutable::parse('2026-04-06')); // "Velikonoční pondělí"
Holidays::name(CarbonImmutable::parse('2026-03-15')); // null
// Všechny svátky roku: ['2026-01-01' => 'Nový rok', ...] seřazené podle data
Holidays::forYear(2026);
// Jen data jako řetězce
Holidays::datesForYear(2026); // ['2026-01-01', '2026-04-03', ...]
Holidays::dateTimesForYear(2026); // ['2026-01-01 00:00:00.000', ...]
// Kolekce CarbonImmutable klíčovaná názvem svátku
Holidays::dates(2026); // Collection<string, CarbonImmutable>
// Velikonoční neděle daného roku
Holidays::easterSunday(2026); // CarbonImmutable 2026-04-05
Funguje s jakoukoli implementací DateTimeInterface (DateTime, DateTimeImmutable, Carbon).
Přes kontejner místo fasády:
use NyonCode\CzechHolidays\CzechHolidays;
$holidays = app(CzechHolidays::class);
$holidays->isHoliday(now());
CLI
php artisan holidays:list # aktuální rok
php artisan holidays:list 2026 # konkrétní rok
php artisan holidays:list 2026 --json
Výstup obsahuje tabulku svátků a souhrnné metriky (celkem / všední dny / víkend):
+------------+-----+-------------------------------+
| Datum | Den | Svátek |
+------------+-----+-------------------------------+
| 2026-01-01 | Čt | Nový rok |
| 2026-04-03 | Pá | Velký pátek |
| ... | ... | ... |
+------------+-----+-------------------------------+
Svátků celkem ............................ 14
Připadá na všední den .................... 12
Připadá na víkend ........................ 2
Konfigurace
Soubor config/czech-holidays.php umožňuje přepsat časové pásmo, seznam pevných
svátků i názvy velikonočních svátků:
return [
'timezone' => 'Europe/Prague',
'fixed' => [
'01-01' => 'Nový rok',
// ...
],
'easter' => [
'good_friday' => 'Velký pátek',
'sunday' => 'Velikonoční neděle',
'monday' => 'Velikonoční pondělí',
],
];
Výpočet Velikonoc
Velikonoční neděle se počítá funkcí easter_days() z rozšíření ext-calendar.
Pokud rozšíření není dostupné, použije se vestavěný Gauss/Butcherův algoritmus,
jehož výsledky jsou shodné s ext-calendar (ověřeno testem pro roky 1583–4099).
Podporované verze
- PHP 8.2+
- Laravel 12.x a 13.x
Testování
composer test # celá Pest sada
composer test:coverage # s pokrytím (vyžaduje Xdebug nebo PCOV)
composer lint # PHPStan (level 5)
composer pint # formátování (Laravel Pint)
Testy běží nad Orchestra Testbench (workbench), takže nepotřebují samostatnou Laravel aplikaci.
Aktuální pokrytí je 100 %. Pokud používáš Herd, je Xdebug součástí a coverage lze spustit bez instalace čehokoliv:
php -d zend_extension=/Applications/Herd.app/Contents/Resources/xdebug/xdebug-84-arm64.so \
-d xdebug.mode=coverage vendor/bin/pest --coverage
Licence
MIT.