Holidays
Calculate which days you don't have to work!
Install / Use
/learn @spatie/HolidaysREADME
Calculate public holidays for a country
This package can calculate public holidays for a country.
use Spatie\Holidays\Holidays;
// returns an array of Belgian holidays
// for the current year
$holidays = Holidays::for('be')->get();
Support us
<img src="https://github-ads.s3.eu-central-1.amazonaws.com/holidays.jpg?t=1" width="419px" />
We invest a lot of resources into creating best in class open source packages. You can support us by buying one of our paid products.
We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on our contact page. We publish all received postcards on our virtual postcard wall.
Installation
You can install the package via composer:
composer require spatie/holidays
Supported countries
We support the countries listed in this directory. If you want to add a country, please create a pull request.
Usage
You can get all holidays for a country by using the get method.
use Spatie\Holidays\Holidays;
use Spatie\Holidays\Countries\Belgium;
// returns an array of Belgian holidays
// for the current year
$holidays = Holidays::for(Belgium::make())->get();
Alternatively, you could also pass an ISO 3166-1 code to the for method.
In case of region based holidays, these will not be included. Use a country class instead.
use Spatie\Holidays\Holidays;
// returns an array of Belgian holidays
// for the current year
$holidays = Holidays::for('be')->get();
Getting holidays for a specific year
You can also pass a specific year.
use Spatie\Holidays\Holidays;
$holidays = Holidays::for(country: 'be', year: 2024)->get();
Getting holidays between two dates
You can also get all holidays between two dates (inclusive).
use Spatie\Holidays\Holidays;
$holidays = Holidays::for('be')->getInRange('2023-06-01', '2024-05-31');
Getting holidays in a specific language
$holidays = Holidays::for(country: 'be', locale: 'fr')->get();
If the locale is not supported for a country, an exception will be thrown.
Determining if a date is a holiday
If you need to see if a date is a holiday, you can use the isHoliday method.
use Spatie\Holidays\Holidays;
Holidays::for('be')->isHoliday('2024-01-01'); // true
Getting the name of a holiday
If you need the name of the holiday, you can use the getName method.
use Spatie\Holidays\Holidays;
Holidays::for('be')->getName('2024-01-01'); // Nieuwjaar
Determining whether a country is supported
To verify whether a country is supported, you can use the has method.
use Spatie\Holidays\Holidays;
Holidays::has('be'); // true
Holidays::has('unknown'); // false
Contributing
This is a community driven package. If you find any errors, please create a pull request with the fix, or at least open an issue.
Adding a new country
- Create a new class in the
Countriesdirectory. It should extend theCountryclass. - Add a test for the new country in the
testsdirectory. - Run the tests so a snapshot gets created.
- Verify the result in the newly created snapshot is correct.
- If the country has multiple languages, add a file in the
lang/directory.
In case your country has specific rules for calculating holidays, for example region specific holidays, you can pass this to the constructor of your country class.
$holidays = Holidays::for(Germany::make('DE-BW'))->get();
The value, DE-BW, will be passed to the region parameter of the constructor of a country.
class Germany extends Country
{
protected function __construct(
protected ?string $region = null,
) {
}
protected function allHolidays(int $year): array
{
// Here you can use $this->region (or other variables) to calculate holidays
}
Please see CONTRIBUTING for more details.
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.
Related Skills
node-connect
347.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
108.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
347.9kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
347.9kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
