Skip to content

Commit 704231d

Browse files
feat: add holidays for South Africa
1 parent 270590c commit 704231d

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
@@ -600,6 +600,7 @@ Almost everything from opening_hours definition is supported, as well as some ex
600600
- [Russian][ph-ru]
601601
- Slovakia
602602
- [Slovenia][ph-si]
603+
- [South Africa][ph-za]
603604
- Spain
604605
- [Sweden][ph-se]
605606
- [Switzerland][ph-ch]
@@ -622,6 +623,7 @@ Almost everything from opening_hours definition is supported, as well as some ex
622623
- Hungary (good until 2024–2025)
623624
- Luxembourg (good until 2025–2026)
624625
- Romania (good until 2021)
626+
- South Africa (2025–2027)
625627

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

@@ -904,5 +906,6 @@ Edit: This does also work on npmjs in this short version … -->
904906
[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
905907
[ph-us]: https://en.wikipedia.org/wiki/Public_holidays_in_the_United_States
906908
[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
909+
[ph-za]: https://www.gov.za/about-sa/public-holidays
907910

908911
<!-- }}} -->

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
@@ -2842,12 +2842,20 @@ export default function(value, nominatim_object, optional_conf_parm) {
28422842
'nextSaturday20Jun' : getDateOfWeekdayInDateRange(6, new Date(year, 5, 20)),
28432843
'nextSaturday31Oct' : getDateOfWeekdayInDateRange(6, new Date(year, 9, 31)),
28442844
'nextWednesday16Nov' : getDateOfWeekdayInDateRange(3, new Date(year, 10, 16)),
2845+
'nextMo-Sa01January' : getDateOfNextWeekdayRange(1, 6, new Date(year, 0, 1)),
28452846
'nextMo-Fr17March' : getDateOfNextWeekdayRange(1, 5, new Date(year, 2, 17)),
2847+
'nextMo-Sa21March' : getDateOfNextWeekdayRange(1, 6, new Date(year, 2, 21)),
2848+
'nextMo-Sa27April' : getDateOfNextWeekdayRange(1, 6, new Date(year, 3, 27)),
28462849
'nextMo-Sa01May' : getDateOfNextWeekdayRange(1, 6, new Date(year, 4, 1)),
28472850
'nextMo-Fr12July' : getDateOfNextWeekdayRange(1, 5, new Date(year, 6, 12)),
2851+
'nextMo-Sa16June' : getDateOfNextWeekdayRange(1, 6, new Date(year, 5, 16)),
28482852
'nextMo-Sa07August' : getDateOfNextWeekdayRange(1, 6, new Date(year, 7, 7)),
28492853
'nextMo-Fr30November' : getDateOfNextWeekdayRange(1, 5, new Date(year, 10, 30)),
2854+
'nextMo-Sa09August' : getDateOfNextWeekdayRange(1, 6, new Date(year, 7, 9)),
2855+
'nextMo-Sa24September' : getDateOfNextWeekdayRange(1, 6, new Date(year, 8, 24)),
2856+
'nextMo-Sa16December' : getDateOfNextWeekdayRange(1, 6, new Date(year, 11, 16)),
28502857
'nextMo-Sa25December' : getDateOfNextWeekdayRange(1, 6, new Date(year, 11, 25)),
2858+
'nextMo-Sa26December' : getDateOfNextWeekdayRange(1, 6, new Date(year, 11, 26)),
28512859
'springEquinox' : springEquinoxCalc(year),
28522860
'autumnalEquinox' : autumnalEquinoxCalc(year),
28532861
};

0 commit comments

Comments
 (0)