NAME

Date::Holidays::BR - Determine Brazilian public holidays

SYNOPSIS

use Date::Holidays::BR;
my ($year, $month, $day) = (localtime)[ 5, 4, 3 ];
$year  += 1900;
$month += 1;
print "Woohoo" if is_br_holiday( $year, $month, $day );

my $h = br_holidays($year);
printf "Jan. 1st is named '%s'\n", $h->{'0101'};

FUNCTIONS

new

Creates a new Date::Holidays::BR object.

my $mh = Date::Holidays::BR->new();

is_holiday

Should at least take three arguments:

year (four digits) month (between 1-12) day (between 1-31)

The return value from is_holiday is either a 1 or a 0 (1 if the specified date is a holiday, 0 otherwise).

if ( $mh->is_holiday( $year, $month, $day ) ) {
  # it's a holiday
}

is_br_holiday

Similar to is_holiday, but instead of returning 1 if the date is a holiday returns a string comprising the name of the holidays. In the event of two or more holidays on the same day (hey, it happens), the string will comprise the name of all those holidays separated by a semicolon.

my $todays_holiday = $mh->is_br_holiday( $year, $month, $day );
if ( $todays_holiday ) {
  print "Today is $todays_holiday.\nDon't bother getting up!\n";
}

holidays

Should take at least one argument:

year (four digits)

Returns a reference to a hash, where the keys are date represented as four digits, the two first representing month (01-12) and the last two representing day (01-31).

The value for the key in question is the local name for the holiday indicated by the day. In the event of two or more holidays on the same day (yes, it happens!), the values will comprise the name of all those holidays separated by a semicolon.

my $years_holidays = holidays( $year );
for (keys %$years_holidays) {
  my ($day, $month) = /(..)(..)/;
  print "$day/$month - $years_holidays->$_\n";
}

NATIONAL HOLIDAYS

The following Brazilian holidays have fixed dates:

Jan   1    Confraternização Universal
Apr  21    Tiradentes
May   1    Dia do Trabalho
Sep   7    Independência do Brasil
Oct  12    Nossa Senhora Aparecida
Nov   2    Dia de Finados
Nov  15    Proclamação da República
Dec  25    Natal

The following Brazilian holidays have mobile dates:

Sexta-feira da Paixão (Friday before Páscoa / Easter)

ABOUT BRAZILIAN HOLIDAYS

Being a large country, Brazil separates its holidays in national, state and municipal holidays. Law 9.093 of 1995 states as holidays:

  • the fixed dates above;

  • the data magna of the State (State's most important date, as determined in that State's law);

  • the days beginning and ending the hundredth year of a city's foundation, as determined in that City's law);

  • religious holidays as determined by each City's law, no more than 4, and already including Sexta-feira da Paixão.

Since that last item makes Sexta-feira da Paixão a holiday for every city in the Country, it was marked as a national holiday.

Páscoa (Easter) is celebrated, but since it always falls on a Sunday, there is no law declaring it as an actual Brazilian Holiday. If you feel it should be added or finds out I am mistaken, please let me know.

SEE ALSO

Lei 10.607 de 2002

Lei 9.335 de 1996

Lei 9.093 de 1995

Lei 6.802 de 1980

Lei 662 de 1949

ACKNOWLEDGEMENTS

Jonas B. Nielsen, for his work regarding the standardization of Date::Holidays modules.

Jose Castro, as this module was taken nearly verbatim from Date::Duration::PT.

AUTHOR

Breno G. de Oliveira, <garu@cpan.org>

BUGS

Please report any bugs or feature requests to bug-date-holidays-br@rt.cpan.org, or through the web interface at http://rt.cpan.org. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

COPYRIGHT & LICENSE

Copyright 2009 Breno G. de Oliveira, All Rights Reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

1 POD Error

The following errors were encountered while parsing the POD:

Around line 170:

Non-ASCII character seen before =encoding in 'Confraternização'. Assuming UTF-8