.tsaw-c{font-family:Inter,system-ui,-apple-system,'Segoe UI',Roboto,Arial,sans-serif;color:#1c1f24;background:#f2f3f5;border-radius:14px;margin:0 0 8px;max-width:100%;overflow:hidden;box-sizing:border-box}.tsaw-c *{box-sizing:border-box}.tsaw-c>summary{list-style:none;cursor:pointer;display:block}.tsaw-c>summary::-webkit-details-marker{display:none}.tsaw-c .ic{display:inline-block;width:28px;height:28px;line-height:0;vertical-align:middle}.tsaw-c .ic svg{width:28px;height:28px}.tsaw-sm{padding:9px 10px 8px}.tsaw-hd{display:flex;align-items:center;gap:10px}.tsaw-nm{flex:1;font-size:17px;font-weight:800;letter-spacing:-.02em;line-height:1.15;margin:0!important;text-transform:none}.tsaw-chev{flex:none;width:36px;height:36px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;transition:transform .2s}.tsaw-chev:before{content:'';width:12px;height:12px;border:solid currentColor;border-width:0 3px 3px 0;transform:translateY(-3px) rotate(45deg)}details[open]>summary .tsaw-chev{transform:rotate(180deg)}.tsaw-tw{font-size:12px;color:#6b7280;margin-top:1px}.tsaw-tx{font-size:13.5px;line-height:1.4;margin:5px 0 6px}.tsaw-lb{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:#6b7280;margin-bottom:3px}.tsaw-row{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:3px}.tsaw-d{background:#fff;border-radius:9px;padding:5px 2px 6px;text-align:center;font-size:13px;line-height:1.25}.tsaw-d b{display:inline;font-size:14.5px}.tsaw-dt{display:block;color:#6b7280;font-size:12px;margin-left:0}.tsaw-mo{display:none}.tsaw-d .ic{display:inline-block;width:20px;height:20px;margin:0;vertical-align:-4px}.tsaw-d .ic svg{width:20px;height:20px}.tsaw-dr{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:1px 3px;margin-top:2px}.tsaw-d .tsaw-rn{flex-basis:100%;max-width:max-content;margin:1px auto 0}.tsaw-c i,.tsaw-wa{font-style:normal}.tsaw-d .tsaw-hi{display:inline;color:#F84444;font-weight:800;font-size:15.5px}.tsaw-d .tsaw-lo{display:inline;color:#2f6fde;font-weight:600;font-size:13px}.tsaw-rn{display:inline-block;margin:0;padding:1px 6px;border-radius:99px;background:#e3edfd;color:#2f6fde;font-size:12px;font-weight:700}.tsaw-rz{background:#eceef1;color:#9aa0a8}.tsaw-td{display:flex;align-items:center;gap:6px 10px;flex-wrap:wrap;background:#fff;border-radius:9px;padding:7px 10px;font-size:15px}.tsaw-td .ic{width:26px;height:26px;vertical-align:-7px}.tsaw-td .ic svg{width:26px;height:26px}.tsaw-td .tsaw-hi{font-size:18px;font-weight:800;color:#F84444}.tsaw-td .tsaw-lo{font-size:14.5px;font-weight:600;color:#2f6fde}.tsaw-td .tsaw-rn{margin:0;font-size:13px}.tsaw-td small.w{color:#4b5563;font-size:14px}.tsaw-cta{margin:4px 0 14px!important;text-align:center}.tsaw-cta small{display:block;margin-top:8px;font-size:14.5px;color:#374151}.tsaw-cta a{display:inline-block;background:#F84444;color:#fff!important;text-decoration:none!important;font-family:Inter,system-ui,sans-serif;font-weight:800;font-size:14px;letter-spacing:.02em;padding:10px 18px;border-radius:999px}.tsaw-cta a:after{content:' \2192'}.tsaw-more{display:flex;align-items:center;justify-content:center;gap:8px;margin:7px -10px -8px;padding:8px 10px;background:#e6e8ec;border-top:1px solid #d9dce2;font-size:12.5px;font-weight:700;letter-spacing:.03em;color:#2a5fc4}.tsaw-more b{display:inline-block;background:#F84444;color:#fff;padding:8px 16px;border-radius:999px;font-size:13px;line-height:1.2;box-shadow:0 1px 3px rgba(0,0,0,.18)}.tsaw-more .o:after{content:' \2193'}.tsaw-more .c:after{content:' \2191'}.tsaw-more .c{display:none}.tsaw-more i{display:none}details[open]>summary .tsaw-more .o{display:none}details[open]>summary .tsaw-more .c{display:inline}.tsaw-bd{padding:0 10px 10px}.tsaw-tb{background:#fff;border-radius:10px;padding:8px 6px;margin-top:6px}.tsaw-tt{font-weight:700;font-size:15px!important;line-height:1.3;margin:0 0 6px 3px!important;padding:0!important;text-transform:none!important;letter-spacing:0!important;color:#111}.tsaw-tb table{width:100%;border-collapse:collapse;table-layout:fixed;font-size:12.5px!important;margin:0;line-height:1.25}.tsaw-tb th{text-align:left;color:#6b7280;font-weight:600;font-size:12px;letter-spacing:0;text-transform:none;padding:5px 2px 5px 5px!important;border:0!important;border-bottom:1px solid #e5e7eb!important;white-space:nowrap;background:transparent!important}.tsaw-tb th:last-child{white-space:normal;line-height:1.15}.tsaw-tb td{padding:6px 2px 6px 5px!important;border:0!important;border-bottom:1px solid #e5e7eb!important;vertical-align:middle;background:transparent!important;overflow-wrap:break-word;white-space:nowrap;font-size:inherit!important}.tsaw-tb td:nth-child(2){white-space:normal}.tsaw-tb td:first-child{white-space:normal;overflow-wrap:anywhere;line-height:1.2}.tsaw-tb tr:last-child td{border-bottom:0!important}.tsaw-tb th:nth-child(1){width:33%}.tsaw-tb th:nth-child(2){width:18%}.tsaw-tb th:nth-child(3),.tsaw-tb th:nth-child(4){width:8.5%}.tsaw-tb th:nth-child(5){width:10.5%}.tsaw-tb td:nth-child(n+3),.tsaw-tb th:nth-child(n+3){padding-left:4px!important;padding-right:1px!important}.tsaw-tb td:nth-child(3),.tsaw-tb td:nth-child(4){padding-left:2px!important;padding-right:0!important}.tsaw-tb td:nth-child(6){letter-spacing:-.5px;white-space:normal}.tsaw-tb td b.ln{font-size:12px;letter-spacing:-.6px}.tsaw-tb td .ic{display:block;width:22px;height:22px}.tsaw-tb td .ic svg{width:22px;height:22px}.tsaw-tb td .dd{display:block;font-size:12px}.tsaw-tb small{font-size:12px}.tsaw-wa{display:inline-block;width:13px;height:13px;vertical-align:-2px;margin-right:2px;color:#2f6fde;line-height:0}.tsaw-wa svg{width:13px;height:13px;display:block}.tsaw-tb td.tsaw-lo{color:#2f6fde;font-weight:600}.tsaw-tb td.tsaw-hi{color:#F84444;font-weight:800;font-size:13px}.tsaw-tide th:nth-child(1){width:26%}.tsaw-tide th:nth-child(2),.tsaw-tide th:nth-child(3){width:37%}.tsaw-band{display:flex;align-items:center;gap:10px;padding:6px 12px;font-weight:800;font-size:12.5px;text-transform:uppercase;letter-spacing:.05em}.tsaw-band b{flex:1}.tsaw-y .tsaw-band{background:#FFD23F;color:#3a2d00}.tsaw-o .tsaw-band{background:#F07C1E;color:#fff}.tsaw-r .tsaw-band{background:#D7263D;color:#fff}.tsaw-a .tsaw-band{background:#3b4250;color:#fff}.tsaw-band .tsaw-chev{background:rgba(255,255,255,.55);width:30px;height:30px}.tsaw-ev{padding:8px 12px 9px}.tsaw-et{font-size:15px;font-weight:800;letter-spacing:-.01em;margin-bottom:3px}.tsaw-mt{display:flex;gap:8px;font-size:13px;line-height:1.35;margin-top:2px}.tsaw-mt b{flex:none;width:46px;color:#6b7280;font-size:12px;font-weight:700;text-transform:uppercase;padding-top:2px}.tsaw-in{margin:0 12px 12px;background:#fff;border-radius:10px;padding:9px 11px;font-size:13px;line-height:1.45}.tsaw-in ul{margin:.3em 0 .3em 1.1em;padding:0}.tsaw-m{display:flex;align-items:center;gap:12px;padding:10px 12px}.tsaw-m svg{flex:none;width:48px;height:48px}.tsaw-mn{font-size:16px;font-weight:800}.tsaw-mk{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:#6b7280}.tsaw-mp{display:inline-block;margin:4px 0 0;padding:2px 8px;border-radius:99px;background:#fff;font-size:12px;font-weight:700;color:#6b7280}@media(min-width:600px){.tsaw-sm{padding:11px 14px 10px}.tsaw-bd{padding:0 14px 12px}.tsaw-nm{font-size:19px}.tsaw-row{gap:6px}.tsaw-d{padding:5px 4px 6px;font-size:13px}.tsaw-d b{font-size:14.5px}.tsaw-d .tsaw-hi{font-size:16px}.tsaw-d .tsaw-lo{font-size:13.5px}.tsaw-mo{display:inline}.tsaw-dt{display:inline;font-size:12.5px;margin-left:3px}.tsaw-d .ic{width:20px;height:20px}.tsaw-d .ic svg{width:20px;height:20px}.tsaw-d .tsaw-rn{flex-basis:auto;margin:0 0 0 2px}.tsaw-tb{padding:10px}.tsaw-tb table{font-size:14px!important}.tsaw-tb th{font-size:12px}.tsaw-tb th:nth-child(1){width:20%}.tsaw-tb th:nth-child(2){width:30%}.tsaw-tb td b.ln{font-size:inherit;letter-spacing:0}.tsaw-tb td .dd{display:inline;margin-right:4px}.tsaw-tb td .ic{display:inline-block;margin-right:4px}.tsaw-band,.tsaw-ev{padding-left:14px;padding-right:14px}.tsaw-in{margin:0 14px 12px}.tsaw-m{padding:10px 14px}.tsaw-more{margin:8px -14px -10px;padding:8px 14px;font-size:12px}}(function(){if(window.pgTsaWxGa)return;window.pgTsaWxGa=1;document.addEventListener('click',function(e){var s=e.target.closest?e.target.closest('summary'):null;if(!s)return;var d=s.parentNode;if(!d)return;if(d.tagName!='DETAILS')return;if(d.open)return;var q=['h3','.tsaw-et','b'],h=null;for(var i=0;i!=q.length;i++){h=s.querySelector(q[i]);if(h)break;}var t=((h||s).textContent||'').replace(/\s+/g,' ').trim().slice(0,90);var cl=String(d.className||'').split(' ');var k=cl[1]||cl[0]||'details';window.dataLayer=window.dataLayer||[];(window.gtag||function(){dataLayer.push(arguments)})('event','click_weather_pubgentiq',{send_to:'G-4YB9PN6FWW',weather_section:t,section_type:k,page_path:location.pathname});},true);})();
Severe thunderstorms are expected over most of KwaZulu-Natal except the south coast and adjacent interior, with damaging winds from 10:00 in the eastern Free State and western and eastern KwaZulu-Natal, and damaging waves on the KZN coast from 11:00. Limpopo is the hottest, with Musina at 42°C, and a heat wave holds over the Mpumalanga Highveld, the southern Lowveld and the south-western Bushveld of Limpopo. The Eastern Cape is the wettest, with an 80% chance of rain showers, while extremely high fire danger covers parts of the north and east.
Visit freshyourfeel.org for more information.
Weather warnings for Monday 19 October
SAWS has 4 weather warnings in force for Monday, the highest warning level 10 for veld fire conditions. Tap a warning to see the areas and what to do.
Red level 10Veld Fire Conditions
WhereRustenburg, Lichtenburg, Frankfort, Hartebeespoort + 18 more
WhenMon 08:00 to 19:59
Areas: Rustenburg, Lichtenburg, Frankfort, Hartebeespoort, Warrenton, Reitz, Pilanesberg, Kimberley, Sasolburg, Koster, Tosca, Parys, Van Reenen, Zeerust, Ventersdorp, Dealesville, Warden, Klerksdorp, Jan Kempdorp, Potchefstroom, Makapanstad, Bohlokong.
- Conditions are such that the FDI index is above 75. Under these conditions fires may develop and spread rapidly resulting in damage to property and possible loss of human and/or animal life.
What to do: All personnel and equipment should be removed from the field. Fire teams, labour and equipment are to be placed on full stand-by. At first sign of smoke, every possible measure should be taken in order to bring the fire under control in the shortest possible time. All available aircraft are to be called for without delay.
Yellow level 2Damaging Waves
WhereM8 Cape Vidal, M3 Durban, M4 Tugela Mouth, M5 Mtunzini + 4 more
WhenMon 11:00 to 23:59
Areas: M8 Cape Vidal, M3 Durban, M4 Tugela Mouth, M5 Mtunzini, M7 Nhlabane, M1 Port Shepstone, M2 Scottburgh, M6 Richards Bay.
- Localised disruption of small harbours and/or ports for a short period of time.
- Difficulty in navigation.
- Small vessels at risk of taking on water and capsizing in a locality.
- Localised disruptions to beachfront activities.
What to do: Small to medium boats are advised to stay away from the open sea and seek the shelter of a harbour. In the harbour, moor the boats properly with ample fenders. Avoid going to beaches.
Yellow level 2Damaging Winds
WhereEscourt, Ekuvukeni, Ladysmith, Hlabisa + 42 more
WhenMon 10:00 to 23:59
Areas: Escourt, Ekuvukeni, Ladysmith, Hlabisa, Hluhluwe, Dannhauser, Underberg, Paulpietersburg, Utrecht, Dundee, King Shaka Airport, Kokstad, Impendle, Donnybrook, Abaqulusi, Goodhom, Makatini, Stanger, Mandini, Maphumulo, M8 Cape Vidal, M3 Durban, M4 Tugela Mouth, M5 Mtunzini, M7 Nhlabane, Giants Castle, Mooi River, M1 Port Shepstone, Pomeroy, Melmoth and 16 more.
- Localised disruption of small harbours and/or a port for a short period of time
- Difficulty in navigation (eg. Hampered progress due to strong winds)
- Small vessels at risk of taking on water and capsizing in a locality.
- Localised disruptions to beachfront activities.
- Localised damage to settlements (formal and informal).
- Localised problems for high-sided vehicles on prone routes.
What to do: Small to medium boats are advised to stay away from the open sea and seek the shelter of a harbour. In the harbour, moor the boats properly with ample fenders. Avoid going to beaches. Drive with caution, especially high-sided vehicles and trucks. Secure or bring indoors loose items such as chairs, bins, signs and roof sheets.
Yellow level 2Damaging Winds
WhereFrankfort, Reitz, Sasolburg, Parys
WhenMon 10:00 to 18:59
Areas: Frankfort, Reitz, Sasolburg, Parys.
- Localised damage to informal settlements.
- Risk of runaway fires.
- Localised power and communication interruptions.
- Localised damage to temporary structures (e.g tents).
- Some few transport routes and travel services affected by wind, falling trees or dust storms.
What to do: Take extra caution when driving, particularly high sided vehicles due to cross winds. Remove loose debris from open areas as it may be blown away. At first sign of smoke, every possible measure should be taken in order to bring the fire under control in the shortest possible time. If possible, avoid erecting temporary structures during this period.
SAWS advisoryImpact-Based Warnings
What4 items, tap to read
- Yellow Level 2 Warning: Severe Thunderstorms are expected over the most parts of KwaZulu-Natal, except along the south coast and adjacent interior, resulting in localised damage to infrastructure and settlements, localised flooding of susceptible roads and bridges.
- Yellow Level 2 Warning: Damaging interior winds are expected over eastern parts of Free State, the western and eastern parts of KwaZulu-Natal, resulting in localised damage to settlements, difficulty in navigation and localised problems for high-sided vehicles on prone routes until Tuesday morning.
- Yellow Level 2 Warning: Damaging winds and waves are expected along the KwaZulu-Natal coastline resulting in localised disruption of beachfront activities, small harbours and/or ports for a short period of time until Tuesday morning.
- Yellow Level 2 Warning: Disruptive rain is expected over KOUGA Local Municipality of the Eastern Cape leading to localised flooding and damage to property.
SAWS advisoryFire Danger Warnings
What1 item, tap to read
- Extremely high fire danger conditions are expected over northern KwaZulu – Natal, the eastern parts of both Free State and North West, northern parts of Gauteng and the central and south-western parts of Limpopo.
SAWS advisoryAdvisories
What1 item, tap to read
- A heat wave with persistently high temperatures is expected in places over the Mpumalanga Highveld, the southern parts of the Mpumalanga Lowveld as well as the south-western Bushveld of Limpopo.
Moon tonightWaxing Gibbous60% lit
The moon tonight is a waxing gibbous, about 60% lit, and the next full moon is on Monday 26 October.
Weather today by province, Monday 19 October
View Weather Forecast for TomorrowView the weather tomorrow on the 7-Day Weather Forecast
Each province lists its main towns with today’s sky, low and high, rain chance and wind; every province starts closed, tap one to open it. Tide times are inside Western Cape, Northern Cape, Eastern Cape and KwaZulu-Natal. Today Johannesburg peaks at 29°C.
Gauteng
Johannesburg, Pretoria, Soweto, VereenigingJohannesburg and Soweto climb from 13°C to 29°C with a 30% chance of thundershowers, and Vereeniging reaches 28°C. Pretoria stays dry at 31°C, with extremely high fire danger in the north.Johannesburg today
Rain, storms29°13°30%
WNW 15 km/h
Tap for cities and townsTap to close GautengTowns todayTownWeatherLoHiRainWind km/h
JohannesburgRain, storms13°29°30%
WNW 15
PretoriaPartly cloudy17°31°0%
WNW 20
SowetoRain, storms13°29°30%
WNW 15
VereenigingRain, storms14°28°30%
WNW 15
Western Cape
Cape Town, Stellenbosch, Paarl, George · tidesCape Town is dry and partly cloudy at 20°C, while Stellenbosch reaches 21°C and Paarl 22°C after a 6°C start. George has slight rain, with a 60% chance and a high of 17°C.Cape Town today
Partly cloudy20°11°0%
WSW 10 km/h
Tap for cities and townsTap to close Western CapeTowns todayTownWeatherLoHiRainWind km/h
Cape TownPartly cloudy11°20°0%
WSW 10
StellenboschPartly cloudy6°21°0%
WSW 5
PaarlPartly cloudy6°22°0%
WSW 5
GeorgeSlight rain10°17°60%
SW 15Tides: Cape TownDayLow tideHigh tideMon 19 Oct03:07, 16:4810:02, 22:43
Mpumalanga and Limpopo next today: Mbombela reaches 34°C and Polokwane reaches 33°C.
Mpumalanga
Mbombela, eMalahleni, ErmeloHeat wave conditions grip the Highveld and the southern Lowveld, where Mbombela peaks at 34°C, while eMalahleni and Ermelo reach 32°C. Each has a 30% chance of showers.Mbombela today
Rain showers34°15°30%
NNE 5 km/h
Tap for cities and townsTap to close MpumalangaTowns todayTownWeatherLoHiRainWind km/h
MbombelaRain showers15°34°30%
NNE 5
eMalahleniRain, storms15°32°30%
NW 20
ErmeloRain showers12°32°30%
NW 15
Limpopo
Polokwane, Tzaneen, Thohoyandou, MusinaHot and dry, with Musina climbing from 21°C to 42°C, Thohoyandou at 38°C, Tzaneen at 37°C and Polokwane at 33°C. Heat wave in the south-western Bushveld and extremely high fire danger in the centre and south-west.Polokwane today
Partly cloudy33°15°0%
NW 15 km/h
Tap for cities and townsTap to close LimpopoTowns todayTownWeatherLoHiRainWind km/h
PolokwanePartly cloudy15°33°0%
NW 15
TzaneenPartly cloudy14°37°0%
ENE 5
ThohoyandouPartly cloudy15°38°0%
NE 5
MusinaPartly cloudy21°42°0%
ENE 10
North West and Free State follow today: Mahikeng reaches 29°C and Bloemfontein reaches 21°C.
North West
Mahikeng, Rustenburg, Potchefstroom, KlerksdorpA veld fire warning covers Rustenburg, Lichtenburg and Hartebeespoort from 08:00 to 19:59. Rustenburg is dry at 33°C, while Mahikeng (29°C), Potchefstroom and Klerksdorp (27°C) have a 30% chance of thundershowers.Mahikeng today
Rain, storms29°19°30%
WSW 15 km/h
Tap for cities and townsTap to close North WestTowns todayTownWeatherLoHiRainWind km/h
MahikengRain, storms19°29°30%
WSW 15
RustenburgPartly cloudy18°33°0%
W 15
PotchefstroomRain, storms17°27°30%
NNW 20
KlerksdorpRain, storms17°27°30%
WSW 20
Free State
Bloemfontein, Bethlehem, KroonstadDamaging winds hit Frankfort, Reitz, Sasolburg and Parys from 10:00 to 18:59, and Frankfort and Reitz are also under a veld fire warning. Bloemfontein reaches 21°C and Kroonstad 25°C, with a 30% chance of thundershowers.Bloemfontein today
Rain, storms21°14°30%
W 20 km/h
Tap for cities and townsTap to close Free StateTowns todayTownWeatherLoHiRainWind km/h
BloemfonteinRain, storms14°21°30%
W 20
BethlehemRain, storms14°23°30%
W 20
KroonstadRain, storms17°25°30%
WSW 15
Northern Cape, Eastern Cape and KwaZulu-Natal close the list today: Kimberley reaches 22°C, Gqeberha reaches 17°C and Durban reaches 26°C.
Northern Cape
Kimberley, Upington, Springbok, De Aar · tidesKimberley and Upington top out at 22°C and De Aar at 18°C, each with a 30% chance of thundershowers. Springbok stays dry, from 5°C to 19°C, and Warrenton is under a veld fire warning from 08:00 to 19:59.Kimberley today
Rain, storms22°15°30%
WSW 20 km/h
Tap for cities and townsTap to close Northern CapeTowns todayTownWeatherLoHiRainWind km/h
KimberleyRain, storms15°22°30%
WSW 20
UpingtonRain, storms9°22°30%
SW 15
SpringbokPartly cloudy5°19°0%
SSE 5
De AarRain, storms13°18°30%
SW 15Tides: Port Nolloth (modelled)DayLow tideHigh tideMon 19 Oct02:45, 16:1009:18, 21:42
Eastern Cape
Gqeberha, East London, Mthatha, Queenstown · tidesA cool, wet day, with an 80% chance of showers across the board. Gqeberha and Mthatha reach 17°C, East London 18°C, and Queenstown only 15°C after an 8°C start.Gqeberha today
Rain showers17°14°80%
WSW 25 km/h
Tap for cities and townsTap to close Eastern CapeTowns todayTownWeatherLoHiRainWind km/h
GqeberhaRain showers14°17°80%
WSW 25
East LondonRain showers15°18°80%
SW 25
MthathaRain showers8°17°80%
SSW 10
QueenstownRain showers8°15°80%
SSW 10Tides: GqeberhaDayLow tideHigh tideMon 19 Oct02:36, 17:1710:24, 23:00Tides: East LondonDayLow tideHigh tideMon 19 Oct02:44, 17:1310:31, 23:09
KwaZulu-Natal
Durban, Pietermaritzburg, Richards Bay, Newcastle · tidesSevere storms threaten most areas away from the south coast, with a 60% chance of thundershowers. Damaging winds hit Ladysmith and Dannhauser from 10:00, and damaging waves reach Durban and Port Shepstone from 11:00. Richards Bay reaches 39°C, Durban 26°C.Durban today
Rain, storms26°21°60%
SSW 25 km/h
Tap for cities and townsTap to close KwaZulu-NatalTowns todayTownWeatherLoHiRainWind km/h
DurbanRain, storms21°26°60%
SSW 25
PietermaritzburgRain, storms17°28°60%
SE 10
Richards BayRain, storms21°39°60%
S 15
NewcastleRain, storms14°32°60%
WNW 15Tides: DurbanDayLow tideHigh tideMon 19 Oct02:21, 17:0910:03, 23:03
View Weather Forecast for TomorrowView the weather tomorrow on the 7-Day Weather Forecast
Forecast data: the South African Weather Service and other third-party sources and providers, brought together with the latest AI tools. We take great care to get every figure right, but mistakes are possible.
Read full story at source