nyoncode/laravel-czech-holidays

České státní svátky pro Laravel — data, názvy, výpočet Velikonoc a Artisan CLI.

Maintainers

Package info

github.com/NyonCode/laravel-czech-holidays

pkg:composer/nyoncode/laravel-czech-holidays

Transparency log

Statistics

Installs: 13

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-07-24 08:08 UTC

This package is auto-updated.

Last update: 2026-07-24 08:12:32 UTC


README

Tests Laravel PHP

Č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.