🎉
Public holidays by language in PHP: namespace Timely\Holidays.
## [Finder](https://github.com/hermajan/time/blob/master/src/timely/holidays/Finder.php)
Abstract class `Timely\Holidays\Finder`; a subclass names its language by implementing `language()` and holidays are loaded from `/.json`. Throws `InvalidArgumentException` for an invalid or unknown language.
- `holidays(?int $year)`: Returns names of holidays by date (`Y-m-d`) for the year, the current one by default.
- `name(?\DateTime $dateTime)`: Returns the name of the holiday, or `null`.
- `isHoliday(?\DateTime $dateTime)`: Checks if the date is a holiday.
- `nextHoliday(?\DateTime $dateTime)`: Returns the first holiday after the date.
- `afterHoliday(?\DateTime $dateTime, string $move = "weekday")`: Returns the first day after the holiday that is not a holiday (the same day if it is not one).
## Czech and Slovak
`Timely\Holidays\Czech\CzechFinder` (`czech/`) and `Timely\Holidays\Slovak\SlovakFinder` (`slovak/`) extend `NameDayFinder` for the Czech and Slovak data:
```php
use Timely\Holidays\Slovak\SlovakFinder;
(new SlovakFinder())->isHoliday(new \DateTime("2026-04-03")); // true
(new SlovakFinder())->name(new \DateTime("2026-04-03")); // "Veľký piatok"
```
### Data format
Each item of the JSON file has a `name` and either a `date` in `j.n.` format, or an `easter` offset in days from Easter Sunday (calculated by [Easter](Easter.md)):
```json
[
{"date": "1.1.", "name": "Deň vzniku Slovenskej republiky"},
{"easter": -2, "name": "Veľký piatok"}
]
```
To add a country, create `src/timely/holidays//.json` and a `NameDayFinder` subclass like `SlovakNameDayFinder`.
Working-day calculations that use the holidays are in [Dates](Dates.md). This namespace is PHP only and has no browser demo.