sunaoka/holidays

Holiday calculation library

v1.5.0 2024-08-27 09:18 UTC

README

Latest License PHP Test codecov

Supported Countries

Installation

composer require sunaoka/holidays

Basic Usage

Finds whether a date is a holiday

use Sunaoka\Holidays\Holidays;

// Is January 1, 2021 a holiday in the United States (US)?
$holidays = new Holidays('US');
$holidays->isHoliday('2021-01-01');
// => true

Returns a list of holidays

use Sunaoka\Holidays\Holidays;

// Returns United States (US) Holidays in 2021
$holidays = new Holidays('US');
$holidays->getHolidays(2021);
// =>
// array(36) {
//   [0] =>
//   class Sunaoka\Holidays\Holiday#1 (4) {
//     protected $name =>
//     string(14) "New Year's Day"
//     public $date =>
//     string(26) "2021-01-01 00:00:00.000000"
//     public $timezone_type =>
//     int(3)
//     public $timezone =>
//     string(3) "UTC"
//   }
//   [1] =>
//   class Sunaoka\Holidays\Holiday#2 (4) {
//     protected $name =>
//     string(26) "Martin Luther King Jr. Day"
//     public $date =>
//     string(26) "2021-01-18 00:00:00.000000"
//     public $timezone_type =>
//     int(3)
//     public $timezone =>
//     string(3) "UTC"
//   }
//     :
//     :
//     :
//   [35] =>
//   class Sunaoka\Holidays\Holiday#36 (4) {
//     protected $name =>
//     string(14) "New Year's Eve"
//     public $date =>
//     string(26) "2021-12-31 00:00:00.000000"
//     public $timezone_type =>
//     int(3)
//     public $timezone =>
//     string(3) "UTC"
//   }

Returns holidays for a given date range

use Sunaoka\Holidays\Holidays;

// Return United States (US) holidays from 2021-01-01 to 2021-01-07
$holidays = new Holidays('US');
$holidays->between(date('2021-01-01'), date('2021-01-07'));
// array(1) {
//   [0] =>
//   class Sunaoka\Holidays\Holiday#1 (4) {
//     protected $name =>
//     string(14) "New Year's Day"
//     public $date =>
//     string(26) "2021-01-01 00:00:00.000000"
//     public $timezone_type =>
//     int(3)
//     public $timezone =>
//     string(3) "UTC"
//   }
// }

Add custom holiday

use Sunaoka\Holidays\Holidays;

// Add 2021-05-05 as my birthday
$holidays = new Holidays('US');
$holidays->addHoliday(new Holiday('2021-05-05', 'My Birthday 🎉'));

$holidays->isHoliday('2021-05-05');
// => true

Update holiday data to latest

php ./vendor/bin/holiday-update

Remove unused country holidays

To avoid shipping unused country holidays, you can run the Sunaoka\\Holidays\\Task\\Composer::removeHolidays task and specify the services you want to keep in composer.json:

{
    "require": {
      "sunaoka/holidays": "^1.1"
    },
    "scripts": {
        "pre-autoload-dump": [
            "Sunaoka\\Holidays\\Task\\Composer::removeHolidays"
        ]
    },
    "extra": {
        "sunaoka/holidays": [
            "jp",
            "us"
        ]
    }
}

In this example, when running composer update or composer install, all holidays except Japan (jp) and United States of America (us) will be removed.