Subject: | Holidays for 2008 & extra function |
Hi Rich,
While looking at a suggestion for my module, Calendar::List, I was looking at the best way to get a list of holidays for a given year. I've included a patch that might be of interest using a new function called are_uk_holidays(), which returns the list of dates for a given year.
Also included are the dates for 2008 too :)
--- Date-Holidays-UK-0.01/lib/Date/Holidays/UK.pm Tue Mar 16 15:38:42 2004
+++ Date-Holidays-UK-0.01_01/lib/Date/Holidays/UK.pm Fri Nov 18 18:35:51 2005
@@ -3,7 +3,7 @@
use warnings;
use base qw(Exporter);
our $VERSION = '0.01';
-our @EXPORT = qw( is_uk_holiday );
+our @EXPORT = qw( is_uk_holiday are_uk_holidays );
=head1 NAME
@@ -36,6 +36,11 @@
Returns the name of the Holiday that falls on the given day, or undef
if there is none.
+=head2 are_uk_holidays( $year )
+
+Returns the list of holidays that fall in the given day. If there are
+no holidays listed for the given year, an empty list is return.
+
=cut
# XXX either programatically fill these, or just do the monkey work
@@ -45,42 +50,50 @@
$holidays{ 2004, 1, 1 } =
$holidays{ 2005, 1, 3 } =
$holidays{ 2006, 1, 2 } =
-$holidays{ 2007, 1, 1 } = "New Year's Day";
+$holidays{ 2007, 1, 1 } =
+$holidays{ 2008, 1, 1 } = "New Year's Day";
$holidays{ 2004, 4, 9 } =
$holidays{ 2005, 3, 25 } =
$holidays{ 2006, 4, 14 } =
-$holidays{ 2007, 4, 6 } = "Good Friday";
+$holidays{ 2007, 4, 6 } =
+$holidays{ 2008, 3, 21 } = "Good Friday";
$holidays{ 2004, 4, 12 } =
$holidays{ 2005, 3, 28 } =
$holidays{ 2006, 4, 17 } =
-$holidays{ 2007, 4, 9 } = "Easter Monday";
+$holidays{ 2007, 4, 9 } =
+$holidays{ 2008, 3, 24 } = "Easter Monday";
$holidays{ 2004, 5, 3 } =
$holidays{ 2005, 5, 2 } =
$holidays{ 2006, 5, 1 } =
-$holidays{ 2007, 5, 7 } = "Early May Bank Holiday";
+$holidays{ 2007, 5, 7 } =
+$holidays{ 2007, 5, 5 } = "Early May Bank Holiday";
$holidays{ 2004, 5, 31 } =
$holidays{ 2005, 5, 30 } =
$holidays{ 2006, 5, 29 } =
-$holidays{ 2007, 5, 28 } = "Spring Bank Holiday";
+$holidays{ 2007, 5, 28 } =
+$holidays{ 2007, 5, 26 } = "Spring Bank Holiday";
$holidays{ 2004, 8, 30 } =
$holidays{ 2005, 8, 29 } =
$holidays{ 2006, 8, 28 } =
-$holidays{ 2007, 8, 27 } = "Summer Bank Holiday";
+$holidays{ 2007, 8, 27 } =
+$holidays{ 2008, 8, 25 } = "Summer Bank Holiday";
$holidays{ 2004, 12, 25 } =
$holidays{ 2005, 12, 25 } =
$holidays{ 2006, 12, 25 } =
-$holidays{ 2007, 12, 25 } = "Christmas Day";
+$holidays{ 2007, 12, 25 } =
+$holidays{ 2008, 12, 25 } = "Christmas Day";
$holidays{ 2004, 12, 26 } =
$holidays{ 2005, 12, 26 } =
$holidays{ 2006, 12, 26 } =
-$holidays{ 2007, 12, 26 } = "Boxing Day";
+$holidays{ 2007, 12, 26 } =
+$holidays{ 2008, 12, 26 } = "Boxing Day";
$holidays{ 2004, 12, 27 } = "Substitute Bank Holiday in lieu of 26th";
@@ -91,6 +104,13 @@
my ($year, $month, $day) = @_;
return $holidays{ $year, $month, $day };
}
+
+sub are_uk_holidays {
+ my $year = shift;
+ return sort map {sprintf "%04d-%02d-%02d",split(/\W+/)} grep {/^$year/} keys %holidays;
+ return keys %holidays;
+}
+
1;
__END__
--- Date-Holidays-UK-0.01/t/holidays.t Tue Mar 16 15:38:42 2004
+++ Date-Holidays-UK-0.01_01/t/holidays.t Fri Nov 18 18:40:33 2005
@@ -1,6 +1,6 @@
#!perl
use strict;
-use Test::More tests => 3;
+use Test::More tests => 5;
my $package = 'Date::Holidays::UK';
use_ok( $package );
@@ -9,3 +9,16 @@
"14th January isn't a Bank Holiday (yet)" );
is( is_uk_holiday( 2004, 12, 28 ), "Substitute Bank Holiday in lieu of 25th",
"oddball christmas on a Saturday" );
+
+
+my @list = are_uk_holidays( 2004 );
+is_deeply( \@list, [ "2004-01-01", "2004-04-09", "2004-04-12",
+ "2004-05-03", "2004-05-31", "2004-08-30",
+ "2004-12-25", "2004-12-26", "2004-12-27",
+ "2004-12-28"
+ ],
+ "10 holidays in 2004" );
+
+@list = are_uk_holidays( 2003 );
+is_deeply( \@list, [],
+ "no holidays listed for 2003" );