Skip to content

Commit

Permalink
Merge pull request #13 from devajmeireles/add-brazilian-holidays
Browse files Browse the repository at this point in the history
Support for Brazilian Holidays
  • Loading branch information
Nielsvanpach authored Jan 17, 2024
2 parents 38207cb + 093578e commit ded94cd
Show file tree
Hide file tree
Showing 3 changed files with 104 additions and 0 deletions.
40 changes: 40 additions & 0 deletions src/Countries/Brazil.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

namespace Spatie\Holidays\Countries;

use Carbon\CarbonImmutable;

class Brazil extends Country
{
public function countryCode(): string
{
return 'br';
}

/** @return array<string, CarbonImmutable> */
protected function allHolidays(int $year): array
{
return array_merge([

Check failure on line 17 in src/Countries/Brazil.php

View workflow job for this annotation

GitHub Actions / phpstan

Method Spatie\Holidays\Countries\Brazil::allHolidays() should return array<string, Carbon\CarbonImmutable> but returns array<string, Carbon\CarbonImmutable|string>.

Check failure on line 17 in src/Countries/Brazil.php

View workflow job for this annotation

GitHub Actions / phpstan

Method Spatie\Holidays\Countries\Brazil::allHolidays() should return array<string, Carbon\CarbonImmutable> but returns array<string, Carbon\CarbonImmutable|string>.
'Dia de Ano Novo' => '01-01',
'Dia de Tiradentes' => '04-21',
'Dia do Trabalhador' => '05-01',
'Independência do Brasil' => '09-07',
'Nossa Senhora Aparecida' => '10-12',
'Finados' => '11-02',
'Proclamação da República' => '11-15',
'Natal' => '12-25',
], $this->variableHolidays($year));
}

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

return [
'Carnaval' => $easter->subDays(47),
'Sexta-feira Santa' => $easter->subDays(2),
'Corpus Christi' => $easter->addDays(60),
];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
[
{
"name": "Dia de Ano Novo",
"date": "2024-01-01"
},
{
"name": "Carnaval",
"date": "2024-02-13"
},
{
"name": "Sexta-feira Santa",
"date": "2024-03-29"
},
{
"name": "Dia de Tiradentes",
"date": "2024-04-21"
},
{
"name": "Dia do Trabalhador",
"date": "2024-05-01"
},
{
"name": "Corpus Christi",
"date": "2024-05-30"
},
{
"name": "Independ\u00eancia do Brasil",
"date": "2024-09-07"
},
{
"name": "Nossa Senhora Aparecida",
"date": "2024-10-12"
},
{
"name": "Finados",
"date": "2024-11-02"
},
{
"name": "Proclama\u00e7\u00e3o da Rep\u00fablica",
"date": "2024-11-15"
},
{
"name": "Natal",
"date": "2024-12-25"
}
]
18 changes: 18 additions & 0 deletions tests/Countries/BrazilTest.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 brazil holidays', function () {
CarbonImmutable::setTestNowAndTimezone('2024-01-01');

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

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

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

0 comments on commit ded94cd

Please sign in to comment.