Giter Site home page Giter Site logo

holidays's Introduction

Calculate public holidays for a country

Latest Version on Packagist Tests Total Downloads

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

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

  1. Create a new class in the Countries directory. It should extend the Country class.
  2. Add a test for the new country in the tests directory.
  3. Run the tests so a snapshot gets created.
  4. Verify the result in the newly created snapshot is correct.
  5. 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.

holidays's People

Contributors

adevade avatar arnebr avatar avdylkrasniqi avatar calonzolg avatar chandachewe10 avatar crawford30 avatar cybernerdie avatar davsaniuv avatar dependabot[bot] avatar devajmeireles avatar felixfrey avatar freekmurze avatar github-actions[bot] avatar indeev avatar kenny1291 avatar lamelas avatar levrailoup avatar lowv-developer avatar martin-welte avatar mauricius avatar mr-wolf-gb avatar nielsvanpach avatar object505 avatar patressz avatar rmartos avatar srsbiz avatar thecaliskan avatar thinkstylestudio avatar wewhite avatar xheaven avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

holidays's Issues

[Bug]: Wrong class name on Mexico file

What happened?

Wrong class name on Mexico.php file breaks tests

How to reproduce the bug

Run tests

Package Version

1.0.2

PHP Version

8.2.4

Which operating systems does with happen with?

No response

Notes

No response

[Bug]: Swiss Regional Holidays are incorrect

What happened?

The current implementation of Switzerland with its regional holidays is incorrect.
Among various things i found the following errors and have provided an PR that improves the implementation and fixes the errors.
This issue links to a faulty pull requests with tests showing some of the errors.

How to reproduce the bug

see PR: #194

Package Version

dev-main

PHP Version

8.1

Which operating systems does with happen with?

No response

Notes

No response

[Bug]: tests failing

What happened?

Most PRs fail due to wrong snapshots

How to reproduce the bug

Run tests on main branch

Package Version

Latest

PHP Version

*8.1

Which operating systems does with happen with?

No response

Notes

Refreshing the snapshots will fix tests.

[Bug]: Canada Victoria Day calculation and test is incorrect

What happened?

Victoria Day in Canada for the year 2024 is May 20th.
The tests snapshot has the date as May 27th which is incorrect for the year 2024.

The code for calculating Victoria Day is incorrect.

Victoria Day is always the preceding Monday from May 25th.
It falls on the Monday between the 18th and the 24th.

How to reproduce the bug

The test case is incorrect.
Adding the correct date in the test snapshot creates a failed test.

The code for calculating Victoria Day is incorrect, this is the bug.

Package Version

main

PHP Version

PHP 8.3.3 (cli) (built: Feb 13 2024 15:41:14) (NTS)

Which operating systems does with happen with?

macOS, Windows, Linux

Notes

I have updated the test snapshot with the correct date for Victoria Day.
I have created a code fix for Canada Victoria Day calculation.

I will create a pull request.

[Bug]: README region code example is incorrect

What happened?

Just like the README says, I tried doing this to get all holidays for Hesse, Germany:

Holidays::for(Germany::make(region: 'DE-HE'), year: $year)->get();

But this failed, as the make method doesn't take in named params. Instead, this works:

Holidays::for(Germany::make('DE-HE'), year: $year)->get();

How to reproduce the bug

Germany::make(region: 'DE-HE');

Package Version

1.8

PHP Version

8.3.0

Which operating systems does with happen with?

macOS

Notes

No response

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.