Check whether a given date is a holiday – locale-aware
This library allows you to check a single day against one or multiple calendars to see whether the given day is a holiday or not.
That also includes “named Days” that are not necessarily “free” but have a special name like “Maundy Thursday”.
holidayChecker is best installed using composer
composer require org_heigl/holidaychecker
Simple usage:
$factory = new HolidayIteratorFactory();
$iterator = $factory->createIteratorFromXmlFile('path/to/a/holiday/file.xml');
$checker = new Holidaychecker($iterator);
$result = $checker->check(new \DateTime());
// $result will be an instance of Org_Heigl\HolidayChecker\Holiday
$result has 3 methods:
true
when the day is a free day according to the local law. Otherwise it’s false
true
when the day has a special name despite being not a free day.You can also get a HolidayIterator
with a 2-letter ISO 3166-1
or a 4-letter ISO 3166-2 code. And when different language-variations are available you can get them
by adding the ISO 639-1 language-code before the ISO 3166-code:
// Get the holidays for mainland france
$iterator = $factory->createIteratorFromIso3166('FR');
// Get the holidays for the french overseas-department La Reunion
$iterator = $factory->createIteratorFromIso3166('FR-RE');
// Get the dutch holidays for belgium
$iterator = $factory->createIteratorFromIso3166('fr_BE');
Currently the holidays for these countries are available:
But the list is constantly extending.
Currently not all countries holidays are available. We are trying to fix that but you might find that exactly the country you need is missing.
As the holidays are retrieved from XML-files you can add your own ones without issue. They need to correspond to the Schema-file and before the schema is checked any XInclude-statements are executed. For more information on that have a look at the more detailed description
You can then load the holidays from your file using the createIteratorFromXmlFile
-method.
If you think the XML-files might be usefull for others you should think about contributing back and open a PullRequest here or attach them to an issue you open.
We’d be very thankfull!