Date-Holidays-PL

 view release on metacpan or  search on metacpan

lib/Date/Holidays/PL.pm  view on Meta::CPAN

    (
        map {
            $_ => {
                %SharedHolidays,
                map { $_ => 1 } qw( 0106 0722 0815 )
            }
        } (1951 .. 1959),
    ),
    (
        map {
            $_ => {
                %SharedHolidays,
                map { $_ => 1 } qw( 0722 )
            }
        } (1960 .. 1988),
    ),
    1989 => {
        %SharedHolidays,
        map { $_ => 1 } qw( 0722 0815 1111 )
    },
    # since 1990
    1990 => {
        %SharedHolidays,
        map { $_ => 1 } qw( 0503 0815 1111 )
    },
    # since 2011
    'CURRENT' => {
        %SharedHolidays,
        map { $_ => 1 } qw( 0106 0503 0815 1111 )
    },
);
# always on those dates
my %FixedHolidays = (
    # New Year's Day
    '0101' => 'Nowy Rok',
    # Epiphany (1951-1959 only)
    '0106' => 'Trzech Króli',
    # Labor Day
    '0501' => 'Święto Państwowe',
    # Constitution Day ( since 1990 )
    '0503' => 'Święto Narodowe Trzeciego Maja',
    # Polish Committee of National Liberation Manifesto (1951-1989 only)
    '0722' => 'Święto Odrodzenia Polski',
    # Assumption of the Blessed Virgin Mary ( 1951-1959, 1989+ )
    '0815' => 'Wniebowzięcie Najświętszej Maryi Panny',
    # All Saints' Day
    '1101' => 'Wszystkich Świętych',
    # Independence Day ( since 1989 )
    '1111' => 'Narodowe Święto Niepodległości',
    # Christmas Day
    '1225' => 'pierwszy dzień Bożego Narodzenia',
    # Boxing Day
    '1226' => 'drugi dzień Bożego Narodzenia',
);

# Params::Validate config
my $ValidateOpts = {
    year => {
        type => SCALAR,
        regex => qr/^\d{4}$/,
        callbacks => {
            'between 1951 and 9999' => sub {
                shift >= 1951
            },
        },
    },
    month => {
        type => SCALAR,
    },
    day => {
        type => SCALAR,
    },
    WEEKENDS => {
        type => BOOLEAN,
        default => 1,
        optional => 1,
    }
};


sub pl_holidays {
    my ($year) = validate_pos(@{[shift]},
        $ValidateOpts->{year},
    );
    my %args = validate(@_,
        {
            WEEKENDS => $ValidateOpts->{WEEKENDS},
        }
    );

    my $y = exists $ChangesByYear{$year} ? $year : 'CURRENT';

    my $holidays = {
        _compute_movablefeasts_for_year( $year ),
        map {
            $_ => $FixedHolidays{$_}
        } keys %{ $ChangesByYear{$y} },
    };

    unless ( $args{WEEKENDS} ) {
        my @weekend_holidays = grep {
                my ($m, $d) = unpack "A2A2", $_;

                my $dt = DateTime->new(
                    year => $year,
                    month => $m,
                    day => $d
                );

                $dt->day_of_week >= 6;
            } keys %$holidays;

        delete @{$holidays}{ @weekend_holidays };
    }

    return $holidays;
};


sub pl_holidays_dt {
    my $year = shift;



( run in 2.507 seconds using v1.01-cache-2.11-cpan-5735350b133 )