Skip to content

Commit fd0c43c

Browse files
feat: Add and update UK holidays
1 parent 2ad0bce commit fd0c43c

File tree

2 files changed

+56
-6
lines changed

2 files changed

+56
-6
lines changed

src/holidays/gb.yaml

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,47 @@
33
'England': # https://www.gov.uk/bank-holidays#england-and-wales
44
_nominatim_url: https://nominatim.openstreetmap.org/reverse?format=json&lat=51.5073219&lon=-0.1276474&zoom=18&addressdetails=1&accept-language=en
55
PH:
6-
- {'name': 'New Year’s Day', 'fixed_date': [1, 1]}
6+
- {'name': 'New Year’s Day', 'variable_date': nextMo-Fr01January}
77
- {'name': 'Good Friday', 'variable_date': easter, 'offset': -2}
88
- {'name': 'Easter Monday', 'variable_date': easter, 'offset': 1}
99
- {'name': 'Early May bank holiday', 'variable_date': firstMayMonday}
1010
- {'name': 'Spring bank holiday', 'variable_date': lastMayMonday}
1111
- {'name': 'Summer bank holiday', 'variable_date': lastAugustMonday}
12-
- {'name': 'Christmas', 'fixed_date': [12, 25]}
13-
- {'name': 'Boxing Day', 'fixed_date': [12, 26]}
12+
- {'name': 'Christmas', 'variable_date': nextMo-Fr25December}
13+
- {'name': 'Boxing Day', 'variable_date': boxingDayBh}
1414
'Wales': # https://www.gov.uk/bank-holidays#england-and-wales
1515
_nominatim_url: https://nominatim.openstreetmap.org/reverse?format=json&lat=52.2928116&lon=-3.73893&zoom=18&addressdetails=1&accept-language=en
1616
PH:
17-
- {'name': 'New Year’s Day', 'fixed_date': [1, 1]}
17+
- {'name': 'New Year’s Day', 'variable_date': nextMo-Fr01January}
1818
- {'name': 'Good Friday', 'variable_date': easter, 'offset': -2}
1919
- {'name': 'Easter Monday', 'variable_date': easter, 'offset': 1}
2020
- {'name': 'Early May bank holiday', 'variable_date': firstMayMonday}
2121
- {'name': 'Spring bank holiday', 'variable_date': lastMayMonday}
2222
- {'name': 'Summer bank holiday', 'variable_date': lastAugustMonday}
23-
- {'name': 'Christmas', 'fixed_date': [12, 25]}
24-
- {'name': 'Boxing Day', 'fixed_date': [12, 26]}
23+
- {'name': 'Christmas', 'variable_date': nextMo-Fr25December}
24+
- {'name': 'Boxing Day', 'variable_date': boxingDayBh}
25+
'Scotland': # https://www.gov.uk/bank-holidays#scotland
26+
_nominatim_url: https://nominatim.openstreetmap.org/reverse?format=json&lat=57.90&lon=-7.17&zoom=18&addressdetails=1&accept-language=en
27+
PH:
28+
- {'name': 'New Year’s Day', 'variable_date': nextMo-Fr01January}
29+
- {'name': '2nd January', 'variable_date': secondJanBh}
30+
- {'name': 'Good Friday', 'variable_date': easter, 'offset': -2}
31+
- {'name': 'Early May bank holiday', 'variable_date': firstMayMonday}
32+
- {'name': 'Spring bank holiday', 'variable_date': lastMayMonday}
33+
- {'name': 'Summer bank holiday', 'variable_date': firstAugustMonday}
34+
- {'name': 'St Andrew’s Day', 'variable_date': nextMo-Fr30November}
35+
- {'name': 'Christmas', 'variable_date': nextMo-Fr25December}
36+
- {'name': 'Boxing Day', 'variable_date': boxingDayBh}
37+
'Northern Ireland': # https://www.gov.uk/bank-holidays#northern-ireland
38+
_nominatim_url: https://nominatim.openstreetmap.org/reverse?format=json&lat=54.666&lon=-6.630&zoom=18&addressdetails=1&accept-language=en
39+
PH:
40+
- {'name': 'New Year’s Day', 'variable_date': nextMo-Fr01January}
41+
- {'name': 'Saint Patrick’s Day', 'variable_date': nextMo-Fr17March}
42+
- {'name': 'Good Friday', 'variable_date': easter, 'offset': -2}
43+
- {'name': 'Easter Monday', 'variable_date': easter, 'offset': 1}
44+
- {'name': 'Early May bank holiday', 'variable_date': firstMayMonday}
45+
- {'name': 'Spring bank holiday', 'variable_date': lastMayMonday}
46+
- {'name': 'Battle of the Boyne (Orangemen’s Day)', 'variable_date': nextMo-Fr12July}
47+
- {'name': 'Summer bank holiday', 'variable_date': lastAugustMonday}
48+
- {'name': 'Christmas', 'variable_date': nextMo-Fr25December}
49+
- {'name': 'Boxing Day', 'variable_date': boxingDayBh}

src/index.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2708,6 +2708,24 @@ export default function(value, nominatim_object, optional_conf_parm) {
27082708
var canadaDay = july_1.getDay() === 0 ? 2 : 1;
27092709
/* }}} */
27102710

2711+
/* Calculate Christmas Day and Boxing bank holidays (UK).
2712+
Christmas Day observed 25th December unless it is a weekend, then the following week day
2713+
Boxing Day the next week day after Christmas Day bank holiday. {{{ */
2714+
var christmasDayBh = getDateOfNextWeekdayRange(1, 5, new Date(year, 11, 25));
2715+
var dayAfterChristmas = new Date(christmasDayBh);
2716+
dayAfterChristmas.setDate(christmasDayBh.getDate() + 1);
2717+
var boxingDayBh = getDateOfNextWeekdayRange(1, 5, dayAfterChristmas);
2718+
/* }}} */
2719+
2720+
/* Calculate New Years and 2nd January bank holidays (Scotland).
2721+
New Year's Day observed 1st January unless it is a weekend, then the following week day
2722+
2nd January the next week day after New Year's Day bank holiday. {{{ */
2723+
var newYearsBh = getDateOfNextWeekdayRange(1, 5, new Date(year, 0, 1));
2724+
var dayAfterNewYears = new Date(newYearsBh);
2725+
dayAfterNewYears.setDate(newYearsBh.getDate() + 1);
2726+
var secondJanBh = getDateOfNextWeekdayRange(1, 5, dayAfterNewYears);
2727+
/* }}} */
2728+
27112729
/* Calculation of the spring and autumnal equinoxes (for Public holidays in Japan). {{{ */
27122730
function springEquinoxCalc(year){
27132731
if(year >= 1900 && year <= 1923){
@@ -2808,6 +2826,8 @@ export default function(value, nominatim_object, optional_conf_parm) {
28082826
'orthodox easter' : oDate,
28092827
'victoriaDay' : new Date(year, 4, victoriaDay),
28102828
'canadaDay' : new Date(year, 6, canadaDay),
2829+
'boxingDayBh' : boxingDayBh,
2830+
'secondJanBh' : secondJanBh,
28112831
'firstJanuaryMonday' : new Date(year, 0, firstWeekdayOfMonth(0, 1)),
28122832
'firstFebruaryMonday' : new Date(year, 1, firstWeekdayOfMonth(1, 1)),
28132833
'lastFebruarySunday' : new Date(year, 1, lastFebruarySunday),
@@ -2825,6 +2845,7 @@ export default function(value, nominatim_object, optional_conf_parm) {
28252845
'firstNovemberTuesday' : new Date(year, 10, firstWeekdayOfMonth(10, 2)),
28262846
'firstMarchTuesday' : new Date(year, 2, firstWeekdayOfMonth(2, 2)),
28272847
'firstAugustTuesday' : new Date(year, 7, firstWeekdayOfMonth(7, 2)),
2848+
'firstAugustMonday' : new Date(year, 7, firstWeekdayOfMonth(7, 1)),
28282849
'firstAugustFriday' : new Date(year, 7, firstWeekdayOfMonth(7, 5)),
28292850
'firstNovemberThursday' : new Date(year, 10, firstWeekdayOfMonth(10, 4)),
28302851
'lastMayMonday' : new Date(year, 4, lastWeekdayOfMonth(4, 1)),
@@ -2839,9 +2860,13 @@ export default function(value, nominatim_object, optional_conf_parm) {
28392860
'nextSaturday20Jun' : getDateOfWeekdayInDateRange(6, new Date(year, 5, 20)),
28402861
'nextSaturday31Oct' : getDateOfWeekdayInDateRange(6, new Date(year, 9, 31)),
28412862
'nextWednesday16Nov' : getDateOfWeekdayInDateRange(3, new Date(year, 10, 16)),
2863+
'nextMo-Fr01January' : getDateOfNextWeekdayRange(1, 5, new Date(year, 0, 1)),
28422864
'nextMo-Fr17March' : getDateOfNextWeekdayRange(1, 5, new Date(year, 2, 17)),
28432865
'nextMo-Sa01May' : getDateOfNextWeekdayRange(1, 6, new Date(year, 4, 1)),
2866+
'nextMo-Fr12July' : getDateOfNextWeekdayRange(1, 5, new Date(year, 6, 12)),
28442867
'nextMo-Sa07August' : getDateOfNextWeekdayRange(1, 6, new Date(year, 7, 7)),
2868+
'nextMo-Fr30November' : getDateOfNextWeekdayRange(1, 5, new Date(year, 10, 30)),
2869+
'nextMo-Fr25December' : getDateOfNextWeekdayRange(1, 5, new Date(year, 11, 25)),
28452870
'nextMo-Sa25December' : getDateOfNextWeekdayRange(1, 6, new Date(year, 11, 25)),
28462871
'springEquinox' : springEquinoxCalc(year),
28472872
'autumnalEquinox' : autumnalEquinoxCalc(year),

0 commit comments

Comments
 (0)