nyoncode / laravel-czech-holidays
České státní svátky pro Laravel — data, názvy, výpočet Velikonoc a Artisan CLI.
Package info
github.com/NyonCode/laravel-czech-holidays
pkg:composer/nyoncode/laravel-czech-holidays
Requires
- php: ^8.2
- illuminate/console: ^12.0|^13.0
- illuminate/contracts: ^12.0|^13.0
- illuminate/support: ^12.0|^13.0
- nesbot/carbon: ^2.72|^3.0
- nyoncode/laravel-package-toolkit: ^2.2
Requires (Dev)
- laravel/pint: ^1.29
- orchestra/testbench: ^10.0|^11.0
- pestphp/pest: ^3.1|^4.0
- pestphp/pest-plugin-laravel: ^3.0|^4.0
- phpstan/phpstan: ^2.1
Suggests
- ext-calendar: Zrychlí výpočet Velikonoc přes easter_days(); bez něj se použije vestavěný fallback.
README
Č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.