Skip to content

Commit db8ca4d

Browse files
Add holidays for South Africa
1 parent 2ad0bce commit db8ca4d

File tree

4 files changed

+54
-0
lines changed

4 files changed

+54
-0
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,7 @@ Almost everything from opening_hours definition is supported, as well as some ex
607607
- [Russian][ph-ru]
608608
- Slovakia
609609
- [Slovenia][ph-si]
610+
- [South Africa][ph-za]
610611
- Spain
611612
- [Sweden][ph-se]
612613
- [Switzerland][ph-ch]
@@ -629,6 +630,7 @@ Almost everything from opening_hours definition is supported, as well as some ex
629630
- Hungary (good until 2024–2025)
630631
- Luxembourg (good until 2025–2026)
631632
- Romania (good until 2021)
633+
- South Africa (2025–2027)
632634

633635
- There can be two cases which need to be separated (this applies for PH and SH):
634636

@@ -977,5 +979,6 @@ Edit: This does also work on npmjs in this short version … -->
977979
[ph-ua]: https://uk.wikipedia.org/wiki/%D0%A1%D0%B2%D1%8F%D1%82%D0%B0_%D1%82%D0%B0_%D0%BF%D0%B0%D0%BC%27%D1%8F%D1%82%D0%BD%D1%96_%D0%B4%D0%BD%D1%96_%D0%B2_%D0%A3%D0%BA%D1%80%D0%B0%D1%97%D0%BD%D1%96
978980
[ph-us]: https://en.wikipedia.org/wiki/Public_holidays_in_the_United_States
979981
[ph-vn]: https://vi.wikipedia.org/wiki/C%C3%A1c_ng%C3%A0y_l%E1%BB%85_%E1%BB%9F_Vi%E1%BB%87t_Nam
982+
[ph-za]: https://www.gov.za/about-sa/public-holidays
980983

981984
<!-- }}} -->

src/holidays/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,4 @@ export { default as ua } from "./ua.yaml";
3535
export { default as us } from "./us.yaml";
3636
export { default as vn } from "./vn.yaml";
3737
export { default as xa } from "./xa.yaml";
38+
export { default as za } from "./za.yaml";

src/holidays/za.yaml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
---
2+
3+
_nominatim_url: 'https://nominatim.openstreetmap.org/reverse?format=json&lat=-28.8747&lon=25.0372&zoom=18&addressdetails=1&accept-language=en'
4+
5+
# https://www.gov.za/about-sa/public-holidays
6+
# https://en.wikipedia.org/wiki/Public_holidays_in_South_Africa
7+
PH:
8+
- {'name': "New Year's Day", 'variable_date': 'nextMo-Sa01January'}
9+
- {'name': 'Human Rights Day', 'variable_date': 'nextMo-Sa21March'}
10+
- {'name': 'Good Friday', 'variable_date': easter, 'offset': -2}
11+
- {'name': 'Family Day', 'variable_date': easter, 'offset': 1}
12+
- {'name': 'Freedom Day', 'variable_date': 'nextMo-Sa27April'}
13+
- {'name': "Workers' Day", 'variable_date': 'nextMo-Sa01May'}
14+
- {'name': 'Youth Day', 'variable_date': 'nextMo-Sa16June'}
15+
- {'name': "National Women's Day", 'variable_date': 'nextMo-Sa09August'}
16+
- {'name': 'Heritage Day', 'variable_date': 'nextMo-Sa24September'}
17+
- {'name': 'Day of Reconciliation', 'variable_date': 'nextMo-Sa16December'}
18+
- {'name': 'Christmas Day', 'variable_date': 'nextMo-Sa25December'}
19+
- {'name': 'Day of Goodwill', 'variable_date': 'nextMo-Sa26December'}
20+
21+
# https://www.gov.za/about-sa/school-calendar
22+
SH:
23+
- name: Before term 1
24+
'2025': [1, 1, 1, 14]
25+
'2026': [1, 1, 1, 13]
26+
'2027': [1, 1, 1, 12]
27+
- name: Between term 1 and term 2
28+
'2025': [3, 29, 4, 7]
29+
'2026': [3, 28, 4, 7]
30+
'2027': [3, 20, 4, 5]
31+
- name: Between term 2 and term 3
32+
'2025': [6, 28, 7, 21]
33+
'2026': [6, 27, 7, 20]
34+
'2027': [6, 26, 7, 21]
35+
- name: Between term 3 and term 4
36+
'2025': [10, 4, 10, 12]
37+
'2026': [9, 24, 10, 5]
38+
'2027': [9, 23, 10, 6]
39+
- name: After term 4
40+
'2025': [12, 11, 12, 31]
41+
'2026': [12, 10, 12, 31]
42+
'2027': [9, 10, 12, 31]

src/index.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2839,10 +2839,18 @@ export default function(value, nominatim_object, optional_conf_parm) {
28392839
'nextSaturday20Jun' : getDateOfWeekdayInDateRange(6, new Date(year, 5, 20)),
28402840
'nextSaturday31Oct' : getDateOfWeekdayInDateRange(6, new Date(year, 9, 31)),
28412841
'nextWednesday16Nov' : getDateOfWeekdayInDateRange(3, new Date(year, 10, 16)),
2842+
'nextMo-Sa01January' : getDateOfNextWeekdayRange(1, 6, new Date(year, 0, 1)),
28422843
'nextMo-Fr17March' : getDateOfNextWeekdayRange(1, 5, new Date(year, 2, 17)),
2844+
'nextMo-Sa21March' : getDateOfNextWeekdayRange(new Date(year, 2, 21)),
2845+
'nextMo-Sa27April' : getDateOfNextWeekdayRange(new Date(year, 3, 27)),
28432846
'nextMo-Sa01May' : getDateOfNextWeekdayRange(1, 6, new Date(year, 4, 1)),
2847+
'nextMo-Sa16June' : getDateOfNextWeekdayRange(new Date(year, 5, 16)),
28442848
'nextMo-Sa07August' : getDateOfNextWeekdayRange(1, 6, new Date(year, 7, 7)),
2849+
'nextMo-Sa09August' : getDateOfNextWeekdayRange(new Date(year, 7, 9)),
2850+
'nextMo-Sa24September' : getDateOfNextWeekdayRange(new Date(year, 8, 24)),
2851+
'nextMo-Sa16December' : getDateOfNextWeekdayRange(new Date(year, 11, 16)),
28452852
'nextMo-Sa25December' : getDateOfNextWeekdayRange(1, 6, new Date(year, 11, 25)),
2853+
'nextMo-Sa26December' : getDateOfNextWeekdayRange(new Date(year, 11, 26)),
28462854
'springEquinox' : springEquinoxCalc(year),
28472855
'autumnalEquinox' : autumnalEquinoxCalc(year),
28482856
};

0 commit comments

Comments
 (0)