Skip to content

Commit

Permalink
Add Benin Holidays
Browse files Browse the repository at this point in the history
  • Loading branch information
Massoud114 committed Jan 20, 2024
1 parent a6b3939 commit 188059a
Show file tree
Hide file tree
Showing 4 changed files with 124 additions and 1 deletion.
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@
"require": {
"php": "^8.1",
"nesbot/carbon": "^2.72.1",
"ext-calendar": "*"
"ext-calendar": "*",
"geniusts/hijri-dates": "^1.1"
},
"require-dev": {
"laravel/prompts": "^0.1.15",
Expand Down
50 changes: 50 additions & 0 deletions src/Countries/Benin.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php

namespace Spatie\Holidays\Countries;

use Carbon\Carbon;
use Carbon\CarbonImmutable;
use GeniusTS\HijriDate\Date;
use GeniusTS\HijriDate\Hijri;

class Benin extends Country
{
public function countryCode(): string
{
return 'bj';
}

protected function allHolidays(int $year): array
{
return array_merge([
'Fête du Nouvel An' => '01-01',
'Fête annuelle des religions traditionnelles' => '01-10',
'Fête du travail' => '05-01',
'Fête de l\'indépendance' => '08-01',
'Jour de la Toussaint' => '11-01',
'Jour de Noël' => '12-25',
'Jour de l\'assomption' => '08-15',
], $this->variableHolidays($year));
}

/** @return array<string, CarbonImmutable> */
protected function variableHolidays(int $year): array
{
$easter = CarbonImmutable::createFromTimestamp(easter_date($year))
->setTimezone('Africa/Porto-Novo');

$hijriYear = Hijri::convertToHijri($easter->format('Y-m-d'))->year;

return [
'Lundi de Pâques' => $easter->addDays(1),
'Jour de l’Ascension' => $easter->addDays(40),
'Lundi de Pentecôte' => $easter->addDays(50),
/*
* Islamic holidays are based on the Hijri calendar and vary by a day or so.
*/
'Jour du Maouloud' => Hijri::convertToGregorian(12, 3, $hijriYear)->toImmutable(),
'Fête du Ramadan' => Hijri::convertToGregorian(10, 1, $hijriYear)->toImmutable(),
'Fête de la Tabaski' => Hijri::convertToGregorian(12, 10, $hijriYear)->toImmutable(),
];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
[
{
"name": "F\u00eate du Ramadan",
"date": "2023-07-27"
},
{
"name": "Jour du Maouloud",
"date": "2023-09-26"
},
{
"name": "F\u00eate du Nouvel An",
"date": "2024-01-01"
},
{
"name": "F\u00eate annuelle des religions traditionnelles",
"date": "2024-01-10"
},
{
"name": "Lundi de P\u00e2ques",
"date": "2024-04-01"
},
{
"name": "F\u00eate de la Tabaski",
"date": "2024-04-20"
},
{
"name": "F\u00eate du travail",
"date": "2024-05-01"
},
{
"name": "Jour de l\u2019Ascension",
"date": "2024-05-10"
},
{
"name": "Lundi de Pentec\u00f4te",
"date": "2024-05-20"
},
{
"name": "F\u00eate de l'ind\u00e9pendance",
"date": "2024-08-01"
},
{
"name": "Jour de l'assomption",
"date": "2024-08-15"
},
{
"name": "Jour de la Toussaint",
"date": "2024-11-01"
},
{
"name": "Jour de No\u00ebl",
"date": "2024-12-25"
}
]
18 changes: 18 additions & 0 deletions tests/Countries/BeninTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace Spatie\Holidays\Tests\Countries;

use Carbon\CarbonImmutable;
use Spatie\Holidays\Holidays;

it('can calculate benin holidays', function () {
CarbonImmutable::setTestNowAndTimezone('2024-01-01');

$holidays = Holidays::for(country: 'bj')->get();

expect($holidays)
->toBeArray()
->not()->toBeEmpty();

expect(formatDates($holidays))->toMatchSnapshot();
});

0 comments on commit 188059a

Please sign in to comment.