The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.


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


  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'};



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

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


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


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";


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";


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)


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.


Lei 10.607 de 2002

Lei 9.335 de 1996

Lei 9.093 de 1995

Lei 6.802 de 1980

Lei 662 de 1949


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.


Breno G. de Oliveira, <>


Please report any bugs or feature requests to, or through the web interface at I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.


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