File Coverage

blib/lib/Date/Holidays/GB.pm
Criterion Covered Total %
statement 96 103 93.2
branch 40 46 86.9
condition 11 20 55.0
subroutine 13 17 76.4
pod 4 9 44.4
total 164 195 84.1


line stmt bran cond sub pod time code
1             package Date::Holidays::GB;
2              
3             our $VERSION = '0.023';
4              
5             # ABSTRACT: Determine British holidays - Current UK public and bank holiday dates up to 2023
6              
7 4     4   648864 use strict;
  4         51  
  4         116  
8 4     4   27 use warnings;
  4         23  
  4         108  
9 4     4   725 use utf8;
  4         19  
  4         50  
10              
11 4     4   4190 use DateTime;
  4         2226077  
  4         229  
12              
13 4     4   54 use base qw( Date::Holidays::Super Exporter );
  4         10  
  4         2291  
14             our @EXPORT_OK = qw(
15             holidays
16             gb_holidays
17             holidays_ymd
18             is_holiday
19             is_gb_holiday
20             next_holiday
21             next_gb_holiday
22             );
23              
24             # See
25             # https://en.wikipedia.org/wiki/ISO_3166-2
26             # https://en.wikipedia.org/wiki/ISO_3166-2:GB
27              
28 4         390 use constant REGION_NAMES => {
29             EAW => 'England & Wales',
30             SCT => 'Scotland',
31             NIR => 'Northern Ireland',
32 4     4   1462 };
  4         10  
33 4     4   33 use constant REGIONS => [ sort keys %{ +REGION_NAMES } ];
  4         14  
  4         13  
  4         6089  
34              
35             our %holidays;
36             set_holidays(\*DATA);
37              
38             sub set_holidays {
39 7     7 0 38363 my $fh = shift;
40 7         175 while (<$fh>) {
41 1644         2548 chomp;
42 1644         4708 my ( $date, $region, $name ) = split /\t/;
43 1644 50 66     5895 next unless $date && $region && $name;
      66        
44              
45 1641         4277 my ( $y, $m, $d ) = split /-/, $date;
46 1641         7169 $holidays{$y}->{$date}->{$region} = $name;
47             }
48              
49             # Define an 'all' if all three regions have a holiday on this day, taking
50             # EAW name as the canonical name
51 7         89 while ( my ( $year, $dates ) = each %holidays ) {
52 98         131 foreach my $holiday ( values %{$dates} ) {
  98         364  
53             $holiday->{all} = $holiday->{EAW}
54 1302 100       1654 if keys %{$holiday} == @{ +REGIONS };
  1302         2011  
  1302         2782  
55             }
56             }
57             }
58              
59 0     0 0 0 sub gb_holidays { return holidays(@_) }
60              
61             sub holidays {
62 7 100   7 1 5681 my %args
63             = $_[0] =~ m/\D/
64             ? @_
65             : ( year => $_[0], regions => $_[1] );
66              
67 7 50 33     80 unless ( exists $args{year} && defined $args{year} ) {
68 0         0 $args{year} = ( localtime(time) )[5];
69 0         0 $args{year} += 1900;
70             }
71              
72 7 50       40 unless ( $args{year} =~ /^\d{4}$/ ) {
73 0         0 die "Year must be numeric and four digits, eg '2004'";
74             }
75              
76             # return if empty regions list (undef gets full list)
77 7 100       13 my @region_codes = @{ $args{regions} || REGIONS }
  7 50       41  
78             or return {};
79              
80 7         15 my %return;
81              
82 7         22 while ( my ( $date, $holiday ) = each %{ $holidays{ $args{year} } } ) {
  72         236  
83 65 100       119 my $string = _holiday( $holiday, \@region_codes )
84             or next;
85              
86 51 100       99 if ( $args{ymd} ) {
87 13         30 $return{$date} = $string;
88             }
89             else {
90 38         122 my ( undef, $m, undef, $d ) = unpack( 'A5A2A1A2', $date );
91 38         138 $return{ $m . $d } = $string;
92             }
93             }
94              
95 7         105 return \%return;
96             }
97              
98             sub holidays_ymd {
99 1 50   1 0 15 my %args
100             = $_[0] =~ m/\D/
101             ? @_
102             : ( year => $_[0], regions => $_[1] );
103              
104 1         6 return holidays( %args, ymd => 1 );
105             }
106              
107 0     0 0 0 sub is_gb_holiday { return is_holiday(@_) }
108              
109             sub is_holiday {
110 24 100   24 1 7827 my %args
111             = $_[0] =~ m/[^0-9-]/
112             ? @_
113             : ( year => $_[0], month => $_[1], day => $_[2], regions => $_[3] );
114              
115 24         47 my ( $y, $m, $d );
116              
117 24 100       59 if ( $args{date} ) {
118 6         39 ( $y, $m, $d ) = $args{date} =~ m{^([0-9]{4})-([0-9]{2})-([0-9]{2})$};
119             }
120             else {
121 18         45 ( $y, $m, $d ) = @args{qw( year month day )};
122             }
123              
124 24 50 33     158 die "Must specify either 'date' or 'year', 'month' and 'day'"
      33        
125             unless $y && $m && $d;
126              
127 24         109 my $date = sprintf( "%04d-%02d-%02d", $y, $m, $d );
128              
129             # return if empty regions list (undef gets full list)
130 24 100       40 my @region_codes = @{ $args{regions} || REGIONS }
  24 100       108  
131             or return;
132              
133             # return if no region has holiday
134 21 100       100 my $holiday = $holidays{$y}->{$date}
135             or return;
136              
137 13         43 return _holiday( $holiday, \@region_codes );
138             }
139              
140 0     0 0 0 sub next_gb_holiday { return next_holiday(@_) }
141              
142             sub next_holiday {
143 4     4 1 1509 my @regions = @_;
144              
145 4 100       15 unless (@regions) {
146 2         4 @regions = ( 'all', @{ +REGIONS } );
  2         9  
147             }
148              
149 4         20 my $now = DateTime->now->set_time_zone("Europe/London");
150 4         18041 my $year = $now->year;
151 4         28 my $today = $now->ymd;
152              
153 4         56 my %next_holidays;
154              
155 4         8 foreach my $date ( sort keys %{ $holidays{$year} } ) {
  4         43  
156 36 100       74 next unless $date gt $today;
157              
158 22         47 my $holiday = $holidays{$year}->{$date};
159              
160 22         33 foreach my $region (@regions) {
161 43 100       109 my $name = $holiday->{$region} or next;
162              
163 30   100     98 $next_holidays{$region} ||= { name => $name, date => $date };
164             }
165              
166 22 100 66     52 last if $next_holidays{all} or keys %next_holidays == @{ +REGIONS };
  20         49  
167             }
168              
169 4         56 return \%next_holidays;
170             }
171              
172             sub _holiday {
173 78     78   139 my ( $holiday, $region_codes ) = @_;
174              
175             # return canonical name (EAW) if all regions have holiday
176 78 100       217 return $holiday->{all} if $holiday->{all};
177              
178 43         67 my %region_codes = map { $_ => 1 } @{$region_codes};
  71         161  
  43         67  
179              
180             # return comma separated string of holidays with region(s) in
181             # parentheses
182 43         70 my %names;
183 43         114 foreach my $region ( sort keys %region_codes ) {
184 71 100       151 next unless $holiday->{$region};
185              
186 29         41 push @{ $names{ $holiday->{$region} } }, REGION_NAMES->{$region};
  29         124  
187             }
188              
189 43 100       129 return unless %names;
190              
191 25         33 my @strings;
192 25         55 foreach my $name ( sort keys %names ) {
193 25         60 push @strings, "$name (" . join( ', ', @{ $names{$name} } ) . ")";
  25         92  
194             }
195              
196 25         127 return join( ', ', @strings );
197             }
198              
199 0     0 1   sub date_generated { '2023-01-04' }
200              
201             1;
202              
203             __DATA__
204             2012-01-02 EAW New Year’s Day
205             2012-01-02 NIR New Year’s Day
206             2012-01-02 SCT 2nd January
207             2012-01-03 SCT New Year’s Day
208             2012-03-19 NIR St Patrick’s Day
209             2012-04-06 EAW Good Friday
210             2012-04-06 NIR Good Friday
211             2012-04-06 SCT Good Friday
212             2012-04-09 EAW Easter Monday
213             2012-04-09 NIR Easter Monday
214             2012-05-07 EAW Early May bank holiday
215             2012-05-07 NIR Early May bank holiday
216             2012-05-07 SCT Early May bank holiday
217             2012-06-04 EAW Spring bank holiday
218             2012-06-04 NIR Spring bank holiday
219             2012-06-04 SCT Spring bank holiday
220             2012-06-05 EAW Queen’s Diamond Jubilee
221             2012-06-05 NIR Queen’s Diamond Jubilee
222             2012-06-05 SCT Queen’s Diamond Jubilee
223             2012-07-12 NIR Battle of the Boyne (Orangemen’s Day)
224             2012-08-06 SCT Summer bank holiday
225             2012-08-27 EAW Summer bank holiday
226             2012-08-27 NIR Summer bank holiday
227             2012-11-30 SCT St Andrew’s Day
228             2012-12-25 EAW Christmas Day
229             2012-12-25 NIR Christmas Day
230             2012-12-25 SCT Christmas Day
231             2012-12-26 EAW Boxing Day
232             2012-12-26 NIR Boxing Day
233             2012-12-26 SCT Boxing Day
234             2013-01-01 EAW New Year’s Day
235             2013-01-01 NIR New Year’s Day
236             2013-01-01 SCT New Year’s Day
237             2013-01-02 SCT 2nd January
238             2013-03-18 NIR St Patrick’s Day
239             2013-03-29 EAW Good Friday
240             2013-03-29 NIR Good Friday
241             2013-03-29 SCT Good Friday
242             2013-04-01 EAW Easter Monday
243             2013-04-01 NIR Easter Monday
244             2013-05-06 EAW Early May bank holiday
245             2013-05-06 NIR Early May bank holiday
246             2013-05-06 SCT Early May bank holiday
247             2013-05-27 EAW Spring bank holiday
248             2013-05-27 NIR Spring bank holiday
249             2013-05-27 SCT Spring bank holiday
250             2013-07-12 NIR Battle of the Boyne (Orangemen’s Day)
251             2013-08-05 SCT Summer bank holiday
252             2013-08-26 EAW Summer bank holiday
253             2013-08-26 NIR Summer bank holiday
254             2013-12-02 SCT St Andrew’s Day
255             2013-12-25 EAW Christmas Day
256             2013-12-25 NIR Christmas Day
257             2013-12-25 SCT Christmas Day
258             2013-12-26 EAW Boxing Day
259             2013-12-26 NIR Boxing Day
260             2013-12-26 SCT Boxing Day
261             2014-01-01 EAW New Year’s Day
262             2014-01-01 NIR New Year’s Day
263             2014-01-01 SCT New Year’s Day
264             2014-01-02 SCT 2nd January
265             2014-03-17 NIR St Patrick’s Day
266             2014-04-18 EAW Good Friday
267             2014-04-18 NIR Good Friday
268             2014-04-18 SCT Good Friday
269             2014-04-21 EAW Easter Monday
270             2014-04-21 NIR Easter Monday
271             2014-05-05 EAW Early May bank holiday
272             2014-05-05 NIR Early May bank holiday
273             2014-05-05 SCT Early May bank holiday
274             2014-05-26 EAW Spring bank holiday
275             2014-05-26 NIR Spring bank holiday
276             2014-05-26 SCT Spring bank holiday
277             2014-07-14 NIR Battle of the Boyne (Orangemen’s Day)
278             2014-08-04 SCT Summer bank holiday
279             2014-08-25 EAW Summer bank holiday
280             2014-08-25 NIR Summer bank holiday
281             2014-12-01 SCT St Andrew’s Day
282             2014-12-25 EAW Christmas Day
283             2014-12-25 NIR Christmas Day
284             2014-12-25 SCT Christmas Day
285             2014-12-26 EAW Boxing Day
286             2014-12-26 NIR Boxing Day
287             2014-12-26 SCT Boxing Day
288             2015-01-01 EAW New Year’s Day
289             2015-01-01 NIR New Year’s Day
290             2015-01-01 SCT New Year’s Day
291             2015-01-02 SCT 2nd January
292             2015-03-17 NIR St Patrick’s Day
293             2015-04-03 EAW Good Friday
294             2015-04-03 NIR Good Friday
295             2015-04-03 SCT Good Friday
296             2015-04-06 EAW Easter Monday
297             2015-04-06 NIR Easter Monday
298             2015-05-04 EAW Early May bank holiday
299             2015-05-04 NIR Early May bank holiday
300             2015-05-04 SCT Early May bank holiday
301             2015-05-25 EAW Spring bank holiday
302             2015-05-25 NIR Spring bank holiday
303             2015-05-25 SCT Spring bank holiday
304             2015-07-13 NIR Battle of the Boyne (Orangemen’s Day)
305             2015-08-03 SCT Summer bank holiday
306             2015-08-31 EAW Summer bank holiday
307             2015-08-31 NIR Summer bank holiday
308             2015-11-30 SCT St Andrew’s Day
309             2015-12-25 EAW Christmas Day
310             2015-12-25 NIR Christmas Day
311             2015-12-25 SCT Christmas Day
312             2015-12-28 EAW Boxing Day
313             2015-12-28 NIR Boxing Day
314             2015-12-28 SCT Boxing Day
315             2016-01-01 EAW New Year’s Day
316             2016-01-01 NIR New Year’s Day
317             2016-01-01 SCT New Year’s Day
318             2016-01-04 SCT 2nd January
319             2016-03-17 NIR St Patrick’s Day
320             2016-03-25 EAW Good Friday
321             2016-03-25 NIR Good Friday
322             2016-03-25 SCT Good Friday
323             2016-03-28 EAW Easter Monday
324             2016-03-28 NIR Easter Monday
325             2016-05-02 EAW Early May bank holiday
326             2016-05-02 NIR Early May bank holiday
327             2016-05-02 SCT Early May bank holiday
328             2016-05-30 EAW Spring bank holiday
329             2016-05-30 NIR Spring bank holiday
330             2016-05-30 SCT Spring bank holiday
331             2016-07-12 NIR Battle of the Boyne (Orangemen’s Day)
332             2016-08-01 SCT Summer bank holiday
333             2016-08-29 EAW Summer bank holiday
334             2016-08-29 NIR Summer bank holiday
335             2016-11-30 SCT St Andrew’s Day
336             2016-12-26 EAW Boxing Day
337             2016-12-26 NIR Boxing Day
338             2016-12-26 SCT Boxing Day
339             2016-12-27 EAW Christmas Day
340             2016-12-27 NIR Christmas Day
341             2016-12-27 SCT Christmas Day
342             2017-01-02 EAW New Year’s Day
343             2017-01-02 NIR New Year’s Day
344             2017-01-02 SCT 2nd January
345             2017-01-03 SCT New Year’s Day
346             2017-03-17 NIR St Patrick’s Day
347             2017-04-14 EAW Good Friday
348             2017-04-14 NIR Good Friday
349             2017-04-14 SCT Good Friday
350             2017-04-17 EAW Easter Monday
351             2017-04-17 NIR Easter Monday
352             2017-05-01 EAW Early May bank holiday
353             2017-05-01 NIR Early May bank holiday
354             2017-05-01 SCT Early May bank holiday
355             2017-05-29 EAW Spring bank holiday
356             2017-05-29 NIR Spring bank holiday
357             2017-05-29 SCT Spring bank holiday
358             2017-07-12 NIR Battle of the Boyne (Orangemen’s Day)
359             2017-08-07 SCT Summer bank holiday
360             2017-08-28 EAW Summer bank holiday
361             2017-08-28 NIR Summer bank holiday
362             2017-11-30 SCT St Andrew’s Day
363             2017-12-25 EAW Christmas Day
364             2017-12-25 NIR Christmas Day
365             2017-12-25 SCT Christmas Day
366             2017-12-26 EAW Boxing Day
367             2017-12-26 NIR Boxing Day
368             2017-12-26 SCT Boxing Day
369             2018-01-01 EAW New Year’s Day
370             2018-01-01 NIR New Year’s Day
371             2018-01-01 SCT New Year’s Day
372             2018-01-02 SCT 2nd January
373             2018-03-19 NIR St Patrick’s Day
374             2018-03-30 EAW Good Friday
375             2018-03-30 NIR Good Friday
376             2018-03-30 SCT Good Friday
377             2018-04-02 EAW Easter Monday
378             2018-04-02 NIR Easter Monday
379             2018-05-07 EAW Early May bank holiday
380             2018-05-07 NIR Early May bank holiday
381             2018-05-07 SCT Early May bank holiday
382             2018-05-28 EAW Spring bank holiday
383             2018-05-28 NIR Spring bank holiday
384             2018-05-28 SCT Spring bank holiday
385             2018-07-12 NIR Battle of the Boyne (Orangemen’s Day)
386             2018-08-06 SCT Summer bank holiday
387             2018-08-27 EAW Summer bank holiday
388             2018-08-27 NIR Summer bank holiday
389             2018-11-30 SCT St Andrew’s Day
390             2018-12-25 EAW Christmas Day
391             2018-12-25 NIR Christmas Day
392             2018-12-25 SCT Christmas Day
393             2018-12-26 EAW Boxing Day
394             2018-12-26 NIR Boxing Day
395             2018-12-26 SCT Boxing Day
396             2019-01-01 EAW New Year’s Day
397             2019-01-01 NIR New Year’s Day
398             2019-01-01 SCT New Year’s Day
399             2019-01-02 SCT 2nd January
400             2019-03-18 NIR St Patrick’s Day
401             2019-04-19 EAW Good Friday
402             2019-04-19 NIR Good Friday
403             2019-04-19 SCT Good Friday
404             2019-04-22 EAW Easter Monday
405             2019-04-22 NIR Easter Monday
406             2019-05-06 EAW Early May bank holiday
407             2019-05-06 NIR Early May bank holiday
408             2019-05-06 SCT Early May bank holiday
409             2019-05-27 EAW Spring bank holiday
410             2019-05-27 NIR Spring bank holiday
411             2019-05-27 SCT Spring bank holiday
412             2019-07-12 NIR Battle of the Boyne (Orangemen’s Day)
413             2019-08-05 SCT Summer bank holiday
414             2019-08-26 EAW Summer bank holiday
415             2019-08-26 NIR Summer bank holiday
416             2019-12-02 SCT St Andrew’s Day
417             2019-12-25 EAW Christmas Day
418             2019-12-25 NIR Christmas Day
419             2019-12-25 SCT Christmas Day
420             2019-12-26 EAW Boxing Day
421             2019-12-26 NIR Boxing Day
422             2019-12-26 SCT Boxing Day
423             2020-01-01 EAW New Year’s Day
424             2020-01-01 NIR New Year’s Day
425             2020-01-01 SCT New Year’s Day
426             2020-01-02 SCT 2nd January
427             2020-03-17 NIR St Patrick’s Day
428             2020-04-10 EAW Good Friday
429             2020-04-10 NIR Good Friday
430             2020-04-10 SCT Good Friday
431             2020-04-13 EAW Easter Monday
432             2020-04-13 NIR Easter Monday
433             2020-05-08 EAW Early May bank holiday (VE day)
434             2020-05-08 NIR Early May bank holiday (VE day)
435             2020-05-08 SCT Early May bank holiday (VE day)
436             2020-05-25 EAW Spring bank holiday
437             2020-05-25 NIR Spring bank holiday
438             2020-05-25 SCT Spring bank holiday
439             2020-07-13 NIR Battle of the Boyne (Orangemen’s Day)
440             2020-08-03 SCT Summer bank holiday
441             2020-08-31 EAW Summer bank holiday
442             2020-08-31 NIR Summer bank holiday
443             2020-11-30 SCT St Andrew’s Day
444             2020-12-25 EAW Christmas Day
445             2020-12-25 NIR Christmas Day
446             2020-12-25 SCT Christmas Day
447             2020-12-28 EAW Boxing Day
448             2020-12-28 NIR Boxing Day
449             2020-12-28 SCT Boxing Day
450             2021-01-01 EAW New Year’s Day
451             2021-01-01 NIR New Year’s Day
452             2021-01-01 SCT New Year’s Day
453             2021-01-04 SCT 2nd January
454             2021-03-17 NIR St Patrick’s Day
455             2021-04-02 EAW Good Friday
456             2021-04-02 NIR Good Friday
457             2021-04-02 SCT Good Friday
458             2021-04-05 EAW Easter Monday
459             2021-04-05 NIR Easter Monday
460             2021-05-03 EAW Early May bank holiday
461             2021-05-03 NIR Early May bank holiday
462             2021-05-03 SCT Early May bank holiday
463             2021-05-31 EAW Spring bank holiday
464             2021-05-31 NIR Spring bank holiday
465             2021-05-31 SCT Spring bank holiday
466             2021-07-12 NIR Battle of the Boyne (Orangemen’s Day)
467             2021-08-02 SCT Summer bank holiday
468             2021-08-30 EAW Summer bank holiday
469             2021-08-30 NIR Summer bank holiday
470             2021-11-30 SCT St Andrew’s Day
471             2021-12-27 EAW Christmas Day
472             2021-12-27 NIR Christmas Day
473             2021-12-27 SCT Christmas Day
474             2021-12-28 EAW Boxing Day
475             2021-12-28 NIR Boxing Day
476             2021-12-28 SCT Boxing Day
477             2022-01-03 EAW New Year’s Day
478             2022-01-03 NIR New Year’s Day
479             2022-01-03 SCT New Year’s Day
480             2022-01-04 SCT 2nd January
481             2022-03-17 NIR St Patrick’s Day
482             2022-04-15 EAW Good Friday
483             2022-04-15 NIR Good Friday
484             2022-04-15 SCT Good Friday
485             2022-04-18 EAW Easter Monday
486             2022-04-18 NIR Easter Monday
487             2022-05-02 EAW Early May bank holiday
488             2022-05-02 NIR Early May bank holiday
489             2022-05-02 SCT Early May bank holiday
490             2022-06-02 EAW Spring bank holiday
491             2022-06-02 NIR Spring bank holiday
492             2022-06-02 SCT Spring bank holiday
493             2022-06-03 EAW Platinum Jubilee bank holiday
494             2022-06-03 NIR Platinum Jubilee bank holiday
495             2022-06-03 SCT Platinum Jubilee bank holiday
496             2022-07-12 NIR Battle of the Boyne (Orangemen’s Day)
497             2022-08-01 SCT Summer bank holiday
498             2022-08-29 EAW Summer bank holiday
499             2022-08-29 NIR Summer bank holiday
500             2022-09-19 EAW Bank Holiday for the State Funeral of Queen Elizabeth II
501             2022-09-19 NIR Bank Holiday for the State Funeral of Queen Elizabeth II
502             2022-09-19 SCT Bank Holiday for the State Funeral of Queen Elizabeth II
503             2022-11-30 SCT St Andrew’s Day
504             2022-12-26 EAW Boxing Day
505             2022-12-26 NIR Boxing Day
506             2022-12-26 SCT Boxing Day
507             2022-12-27 EAW Christmas Day
508             2022-12-27 NIR Christmas Day
509             2022-12-27 SCT Christmas Day
510             2023-01-02 EAW New Year’s Day
511             2023-01-02 NIR New Year’s Day
512             2023-01-02 SCT New Year’s Day
513             2023-01-03 SCT 2nd January
514             2023-03-17 NIR St Patrick’s Day
515             2023-04-07 EAW Good Friday
516             2023-04-07 NIR Good Friday
517             2023-04-07 SCT Good Friday
518             2023-04-10 EAW Easter Monday
519             2023-04-10 NIR Easter Monday
520             2023-05-01 EAW Early May bank holiday
521             2023-05-01 NIR Early May bank holiday
522             2023-05-01 SCT Early May bank holiday
523             2023-05-08 EAW Bank holiday for the coronation of King Charles III
524             2023-05-08 NIR Bank holiday for the coronation of King Charles III
525             2023-05-08 SCT Bank holiday for the coronation of King Charles III
526             2023-05-29 EAW Spring bank holiday
527             2023-05-29 NIR Spring bank holiday
528             2023-05-29 SCT Spring bank holiday
529             2023-07-12 NIR Battle of the Boyne (Orangemen’s Day)
530             2023-08-07 SCT Summer bank holiday
531             2023-08-28 EAW Summer bank holiday
532             2023-08-28 NIR Summer bank holiday
533             2023-11-30 SCT St Andrew’s Day
534             2023-12-25 EAW Christmas Day
535             2023-12-25 NIR Christmas Day
536             2023-12-25 SCT Christmas Day
537             2023-12-26 EAW Boxing Day
538             2023-12-26 NIR Boxing Day
539             2023-12-26 SCT Boxing Day
540             2024-01-01 EAW New Year’s Day
541             2024-01-01 NIR New Year’s Day
542             2024-01-01 SCT New Year’s Day
543             2024-01-02 SCT 2nd January
544             2024-03-18 NIR St Patrick’s Day
545             2024-03-29 EAW Good Friday
546             2024-03-29 NIR Good Friday
547             2024-03-29 SCT Good Friday
548             2024-04-01 EAW Easter Monday
549             2024-04-01 NIR Easter Monday
550             2024-05-06 EAW Early May bank holiday
551             2024-05-06 NIR Early May bank holiday
552             2024-05-06 SCT Early May bank holiday
553             2024-05-27 EAW Spring bank holiday
554             2024-05-27 NIR Spring bank holiday
555             2024-05-27 SCT Spring bank holiday
556             2024-07-12 NIR Battle of the Boyne (Orangemen’s Day)
557             2024-08-05 SCT Summer bank holiday
558             2024-08-26 EAW Summer bank holiday
559             2024-08-26 NIR Summer bank holiday
560             2024-12-02 SCT St Andrew’s Day
561             2024-12-25 EAW Christmas Day
562             2024-12-25 NIR Christmas Day
563             2024-12-25 SCT Christmas Day
564             2024-12-26 EAW Boxing Day
565             2024-12-26 NIR Boxing Day
566             2024-12-26 SCT Boxing Day
567             2025-01-01 EAW New Year’s Day
568             2025-01-01 NIR New Year’s Day
569             2025-01-01 SCT New Year’s Day
570             2025-01-02 SCT 2nd January
571             2025-03-17 NIR St Patrick’s Day
572             2025-04-18 EAW Good Friday
573             2025-04-18 NIR Good Friday
574             2025-04-18 SCT Good Friday
575             2025-04-21 EAW Easter Monday
576             2025-04-21 NIR Easter Monday
577             2025-05-05 EAW Early May bank holiday
578             2025-05-05 NIR Early May bank holiday
579             2025-05-05 SCT Early May bank holiday
580             2025-05-26 EAW Spring bank holiday
581             2025-05-26 NIR Spring bank holiday
582             2025-05-26 SCT Spring bank holiday
583             2025-07-14 NIR Battle of the Boyne (Orangemen’s Day)
584             2025-08-04 SCT Summer bank holiday
585             2025-08-25 EAW Summer bank holiday
586             2025-08-25 NIR Summer bank holiday
587             2025-12-01 SCT St Andrew’s Day
588             2025-12-25 EAW Christmas Day
589             2025-12-25 NIR Christmas Day
590             2025-12-25 SCT Christmas Day
591             2025-12-26 EAW Boxing Day
592             2025-12-26 NIR Boxing Day
593             2025-12-26 SCT Boxing Day