Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
18 / 18
100.00% covered (success)
100.00%
7 / 7
CRAP
100.00% covered (success)
100.00%
1 / 1
Timezone
100.00% covered (success)
100.00%
18 / 18
100.00% covered (success)
100.00%
7 / 7
10
100.00% covered (success)
100.00%
1 / 1
 toDateTimeZone
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getUtcOffset
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getUtcOffsetString
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
2
 label
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 labelList
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 toArray
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 toArrayWithLabels
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3declare(strict_types=1);
4
5namespace DevToolbelt\Enums\Locale;
6
7use DateTimeZone;
8use DateTimeImmutable;
9use DevToolbelt\Enums\EnumInterface;
10
11/**
12 * Enum representing all PHP supported timezones.
13 *
14 * This enum provides type-safe timezone configuration for JWT timestamp generation.
15 * The default timezone is UTC. Includes legacy/alias timezones for backward compatibility.
16 */
17enum Timezone: string implements EnumInterface
18{
19    case AFRICA_ABIDJAN = "Africa/Abidjan";
20    case AFRICA_ACCRA = "Africa/Accra";
21    case AFRICA_ADDIS_ABABA = "Africa/Addis_Ababa";
22    case AFRICA_ALGIERS = "Africa/Algiers";
23    case AFRICA_ASMARA = "Africa/Asmara";
24    case AFRICA_ASMERA = "Africa/Asmera";
25    case AFRICA_BAMAKO = "Africa/Bamako";
26    case AFRICA_BANGUI = "Africa/Bangui";
27    case AFRICA_BANJUL = "Africa/Banjul";
28    case AFRICA_BISSAU = "Africa/Bissau";
29    case AFRICA_BLANTYRE = "Africa/Blantyre";
30    case AFRICA_BRAZZAVILLE = "Africa/Brazzaville";
31    case AFRICA_BUJUMBURA = "Africa/Bujumbura";
32    case AFRICA_CAIRO = "Africa/Cairo";
33    case AFRICA_CASABLANCA = "Africa/Casablanca";
34    case AFRICA_CEUTA = "Africa/Ceuta";
35    case AFRICA_CONAKRY = "Africa/Conakry";
36    case AFRICA_DAKAR = "Africa/Dakar";
37    case AFRICA_DAR_ES_SALAAM = "Africa/Dar_es_Salaam";
38    case AFRICA_DJIBOUTI = "Africa/Djibouti";
39    case AFRICA_DOUALA = "Africa/Douala";
40    case AFRICA_EL_AAIUN = "Africa/El_Aaiun";
41    case AFRICA_FREETOWN = "Africa/Freetown";
42    case AFRICA_GABORONE = "Africa/Gaborone";
43    case AFRICA_HARARE = "Africa/Harare";
44    case AFRICA_JOHANNESBURG = "Africa/Johannesburg";
45    case AFRICA_JUBA = "Africa/Juba";
46    case AFRICA_KAMPALA = "Africa/Kampala";
47    case AFRICA_KHARTOUM = "Africa/Khartoum";
48    case AFRICA_KIGALI = "Africa/Kigali";
49    case AFRICA_KINSHASA = "Africa/Kinshasa";
50    case AFRICA_LAGOS = "Africa/Lagos";
51    case AFRICA_LIBREVILLE = "Africa/Libreville";
52    case AFRICA_LOME = "Africa/Lome";
53    case AFRICA_LUANDA = "Africa/Luanda";
54    case AFRICA_LUBUMBASHI = "Africa/Lubumbashi";
55    case AFRICA_LUSAKA = "Africa/Lusaka";
56    case AFRICA_MALABO = "Africa/Malabo";
57    case AFRICA_MAPUTO = "Africa/Maputo";
58    case AFRICA_MASERU = "Africa/Maseru";
59    case AFRICA_MBABANE = "Africa/Mbabane";
60    case AFRICA_MOGADISHU = "Africa/Mogadishu";
61    case AFRICA_MONROVIA = "Africa/Monrovia";
62    case AFRICA_NAIROBI = "Africa/Nairobi";
63    case AFRICA_NDJAMENA = "Africa/Ndjamena";
64    case AFRICA_NIAMEY = "Africa/Niamey";
65    case AFRICA_NOUAKCHOTT = "Africa/Nouakchott";
66    case AFRICA_OUAGADOUGOU = "Africa/Ouagadougou";
67    case AFRICA_PORTO_MINUS_NOVO = "Africa/Porto-Novo";
68    case AFRICA_SAO_TOME = "Africa/Sao_Tome";
69    case AFRICA_TIMBUKTU = "Africa/Timbuktu";
70    case AFRICA_TRIPOLI = "Africa/Tripoli";
71    case AFRICA_TUNIS = "Africa/Tunis";
72    case AFRICA_WINDHOEK = "Africa/Windhoek";
73    case AMERICA_ADAK = "America/Adak";
74    case AMERICA_ANCHORAGE = "America/Anchorage";
75    case AMERICA_ANGUILLA = "America/Anguilla";
76    case AMERICA_ANTIGUA = "America/Antigua";
77    case AMERICA_ARAGUAINA = "America/Araguaina";
78    case AMERICA_ARGENTINA_BUENOS_AIRES = "America/Argentina/Buenos_Aires";
79    case AMERICA_ARGENTINA_CATAMARCA = "America/Argentina/Catamarca";
80    case AMERICA_ARGENTINA_COMODRIVADAVIA = "America/Argentina/ComodRivadavia";
81    case AMERICA_ARGENTINA_CORDOBA = "America/Argentina/Cordoba";
82    case AMERICA_ARGENTINA_JUJUY = "America/Argentina/Jujuy";
83    case AMERICA_ARGENTINA_LA_RIOJA = "America/Argentina/La_Rioja";
84    case AMERICA_ARGENTINA_MENDOZA = "America/Argentina/Mendoza";
85    case AMERICA_ARGENTINA_RIO_GALLEGOS = "America/Argentina/Rio_Gallegos";
86    case AMERICA_ARGENTINA_SALTA = "America/Argentina/Salta";
87    case AMERICA_ARGENTINA_SAN_JUAN = "America/Argentina/San_Juan";
88    case AMERICA_ARGENTINA_SAN_LUIS = "America/Argentina/San_Luis";
89    case AMERICA_ARGENTINA_TUCUMAN = "America/Argentina/Tucuman";
90    case AMERICA_ARGENTINA_USHUAIA = "America/Argentina/Ushuaia";
91    case AMERICA_ARUBA = "America/Aruba";
92    case AMERICA_ASUNCION = "America/Asuncion";
93    case AMERICA_ATIKOKAN = "America/Atikokan";
94    case AMERICA_ATKA = "America/Atka";
95    case AMERICA_BAHIA = "America/Bahia";
96    case AMERICA_BAHIA_BANDERAS = "America/Bahia_Banderas";
97    case AMERICA_BARBADOS = "America/Barbados";
98    case AMERICA_BELEM = "America/Belem";
99    case AMERICA_BELIZE = "America/Belize";
100    case AMERICA_BLANC_MINUS_SABLON = "America/Blanc-Sablon";
101    case AMERICA_BOA_VISTA = "America/Boa_Vista";
102    case AMERICA_BOGOTA = "America/Bogota";
103    case AMERICA_BOISE = "America/Boise";
104    case AMERICA_BUENOS_AIRES = "America/Buenos_Aires";
105    case AMERICA_CAMBRIDGE_BAY = "America/Cambridge_Bay";
106    case AMERICA_CAMPO_GRANDE = "America/Campo_Grande";
107    case AMERICA_CANCUN = "America/Cancun";
108    case AMERICA_CARACAS = "America/Caracas";
109    case AMERICA_CATAMARCA = "America/Catamarca";
110    case AMERICA_CAYENNE = "America/Cayenne";
111    case AMERICA_CAYMAN = "America/Cayman";
112    case AMERICA_CHICAGO = "America/Chicago";
113    case AMERICA_CHIHUAHUA = "America/Chihuahua";
114    case AMERICA_CIUDAD_JUAREZ = "America/Ciudad_Juarez";
115    case AMERICA_CORAL_HARBOUR = "America/Coral_Harbour";
116    case AMERICA_CORDOBA = "America/Cordoba";
117    case AMERICA_COSTA_RICA = "America/Costa_Rica";
118    case AMERICA_COYHAIQUE = "America/Coyhaique";
119    case AMERICA_CRESTON = "America/Creston";
120    case AMERICA_CUIABA = "America/Cuiaba";
121    case AMERICA_CURACAO = "America/Curacao";
122    case AMERICA_DANMARKSHAVN = "America/Danmarkshavn";
123    case AMERICA_DAWSON = "America/Dawson";
124    case AMERICA_DAWSON_CREEK = "America/Dawson_Creek";
125    case AMERICA_DENVER = "America/Denver";
126    case AMERICA_DETROIT = "America/Detroit";
127    case AMERICA_DOMINICA = "America/Dominica";
128    case AMERICA_EDMONTON = "America/Edmonton";
129    case AMERICA_EIRUNEPE = "America/Eirunepe";
130    case AMERICA_EL_SALVADOR = "America/El_Salvador";
131    case AMERICA_ENSENADA = "America/Ensenada";
132    case AMERICA_FORT_NELSON = "America/Fort_Nelson";
133    case AMERICA_FORT_WAYNE = "America/Fort_Wayne";
134    case AMERICA_FORTALEZA = "America/Fortaleza";
135    case AMERICA_GLACE_BAY = "America/Glace_Bay";
136    case AMERICA_GODTHAB = "America/Godthab";
137    case AMERICA_GOOSE_BAY = "America/Goose_Bay";
138    case AMERICA_GRAND_TURK = "America/Grand_Turk";
139    case AMERICA_GRENADA = "America/Grenada";
140    case AMERICA_GUADELOUPE = "America/Guadeloupe";
141    case AMERICA_GUATEMALA = "America/Guatemala";
142    case AMERICA_GUAYAQUIL = "America/Guayaquil";
143    case AMERICA_GUYANA = "America/Guyana";
144    case AMERICA_HALIFAX = "America/Halifax";
145    case AMERICA_HAVANA = "America/Havana";
146    case AMERICA_HERMOSILLO = "America/Hermosillo";
147    case AMERICA_INDIANA_INDIANAPOLIS = "America/Indiana/Indianapolis";
148    case AMERICA_INDIANA_KNOX = "America/Indiana/Knox";
149    case AMERICA_INDIANA_MARENGO = "America/Indiana/Marengo";
150    case AMERICA_INDIANA_PETERSBURG = "America/Indiana/Petersburg";
151    case AMERICA_INDIANA_TELL_CITY = "America/Indiana/Tell_City";
152    case AMERICA_INDIANA_VEVAY = "America/Indiana/Vevay";
153    case AMERICA_INDIANA_VINCENNES = "America/Indiana/Vincennes";
154    case AMERICA_INDIANA_WINAMAC = "America/Indiana/Winamac";
155    case AMERICA_INDIANAPOLIS = "America/Indianapolis";
156    case AMERICA_INUVIK = "America/Inuvik";
157    case AMERICA_IQALUIT = "America/Iqaluit";
158    case AMERICA_JAMAICA = "America/Jamaica";
159    case AMERICA_JUJUY = "America/Jujuy";
160    case AMERICA_JUNEAU = "America/Juneau";
161    case AMERICA_KENTUCKY_LOUISVILLE = "America/Kentucky/Louisville";
162    case AMERICA_KENTUCKY_MONTICELLO = "America/Kentucky/Monticello";
163    case AMERICA_KNOX_IN = "America/Knox_IN";
164    case AMERICA_KRALENDIJK = "America/Kralendijk";
165    case AMERICA_LA_PAZ = "America/La_Paz";
166    case AMERICA_LIMA = "America/Lima";
167    case AMERICA_LOS_ANGELES = "America/Los_Angeles";
168    case AMERICA_LOUISVILLE = "America/Louisville";
169    case AMERICA_LOWER_PRINCES = "America/Lower_Princes";
170    case AMERICA_MACEIO = "America/Maceio";
171    case AMERICA_MANAGUA = "America/Managua";
172    case AMERICA_MANAUS = "America/Manaus";
173    case AMERICA_MARIGOT = "America/Marigot";
174    case AMERICA_MARTINIQUE = "America/Martinique";
175    case AMERICA_MATAMOROS = "America/Matamoros";
176    case AMERICA_MAZATLAN = "America/Mazatlan";
177    case AMERICA_MENDOZA = "America/Mendoza";
178    case AMERICA_MENOMINEE = "America/Menominee";
179    case AMERICA_MERIDA = "America/Merida";
180    case AMERICA_METLAKATLA = "America/Metlakatla";
181    case AMERICA_MEXICO_CITY = "America/Mexico_City";
182    case AMERICA_MIQUELON = "America/Miquelon";
183    case AMERICA_MONCTON = "America/Moncton";
184    case AMERICA_MONTERREY = "America/Monterrey";
185    case AMERICA_MONTEVIDEO = "America/Montevideo";
186    case AMERICA_MONTREAL = "America/Montreal";
187    case AMERICA_MONTSERRAT = "America/Montserrat";
188    case AMERICA_NASSAU = "America/Nassau";
189    case AMERICA_NEW_YORK = "America/New_York";
190    case AMERICA_NIPIGON = "America/Nipigon";
191    case AMERICA_NOME = "America/Nome";
192    case AMERICA_NORONHA = "America/Noronha";
193    case AMERICA_NORTH_DAKOTA_BEULAH = "America/North_Dakota/Beulah";
194    case AMERICA_NORTH_DAKOTA_CENTER = "America/North_Dakota/Center";
195    case AMERICA_NORTH_DAKOTA_NEW_SALEM = "America/North_Dakota/New_Salem";
196    case AMERICA_NUUK = "America/Nuuk";
197    case AMERICA_OJINAGA = "America/Ojinaga";
198    case AMERICA_PANAMA = "America/Panama";
199    case AMERICA_PANGNIRTUNG = "America/Pangnirtung";
200    case AMERICA_PARAMARIBO = "America/Paramaribo";
201    case AMERICA_PHOENIX = "America/Phoenix";
202    case AMERICA_PORT_MINUS_AU_MINUS_PRINCE = "America/Port-au-Prince";
203    case AMERICA_PORT_OF_SPAIN = "America/Port_of_Spain";
204    case AMERICA_PORTO_ACRE = "America/Porto_Acre";
205    case AMERICA_PORTO_VELHO = "America/Porto_Velho";
206    case AMERICA_PUERTO_RICO = "America/Puerto_Rico";
207    case AMERICA_PUNTA_ARENAS = "America/Punta_Arenas";
208    case AMERICA_RAINY_RIVER = "America/Rainy_River";
209    case AMERICA_RANKIN_INLET = "America/Rankin_Inlet";
210    case AMERICA_RECIFE = "America/Recife";
211    case AMERICA_REGINA = "America/Regina";
212    case AMERICA_RESOLUTE = "America/Resolute";
213    case AMERICA_RIO_BRANCO = "America/Rio_Branco";
214    case AMERICA_ROSARIO = "America/Rosario";
215    case AMERICA_SANTA_ISABEL = "America/Santa_Isabel";
216    case AMERICA_SANTAREM = "America/Santarem";
217    case AMERICA_SANTIAGO = "America/Santiago";
218    case AMERICA_SANTO_DOMINGO = "America/Santo_Domingo";
219    case AMERICA_SAO_PAULO = "America/Sao_Paulo";
220    case AMERICA_SCORESBYSUND = "America/Scoresbysund";
221    case AMERICA_SHIPROCK = "America/Shiprock";
222    case AMERICA_SITKA = "America/Sitka";
223    case AMERICA_ST_BARTHELEMY = "America/St_Barthelemy";
224    case AMERICA_ST_JOHNS = "America/St_Johns";
225    case AMERICA_ST_KITTS = "America/St_Kitts";
226    case AMERICA_ST_LUCIA = "America/St_Lucia";
227    case AMERICA_ST_THOMAS = "America/St_Thomas";
228    case AMERICA_ST_VINCENT = "America/St_Vincent";
229    case AMERICA_SWIFT_CURRENT = "America/Swift_Current";
230    case AMERICA_TEGUCIGALPA = "America/Tegucigalpa";
231    case AMERICA_THULE = "America/Thule";
232    case AMERICA_THUNDER_BAY = "America/Thunder_Bay";
233    case AMERICA_TIJUANA = "America/Tijuana";
234    case AMERICA_TORONTO = "America/Toronto";
235    case AMERICA_TORTOLA = "America/Tortola";
236    case AMERICA_VANCOUVER = "America/Vancouver";
237    case AMERICA_VIRGIN = "America/Virgin";
238    case AMERICA_WHITEHORSE = "America/Whitehorse";
239    case AMERICA_WINNIPEG = "America/Winnipeg";
240    case AMERICA_YAKUTAT = "America/Yakutat";
241    case AMERICA_YELLOWKNIFE = "America/Yellowknife";
242    case ANTARCTICA_CASEY = "Antarctica/Casey";
243    case ANTARCTICA_DAVIS = "Antarctica/Davis";
244    case ANTARCTICA_DUMONTDURVILLE = "Antarctica/DumontDUrville";
245    case ANTARCTICA_MACQUARIE = "Antarctica/Macquarie";
246    case ANTARCTICA_MAWSON = "Antarctica/Mawson";
247    case ANTARCTICA_MCMURDO = "Antarctica/McMurdo";
248    case ANTARCTICA_PALMER = "Antarctica/Palmer";
249    case ANTARCTICA_ROTHERA = "Antarctica/Rothera";
250    case ANTARCTICA_SOUTH_POLE = "Antarctica/South_Pole";
251    case ANTARCTICA_SYOWA = "Antarctica/Syowa";
252    case ANTARCTICA_TROLL = "Antarctica/Troll";
253    case ANTARCTICA_VOSTOK = "Antarctica/Vostok";
254    case ARCTIC_LONGYEARBYEN = "Arctic/Longyearbyen";
255    case ASIA_ADEN = "Asia/Aden";
256    case ASIA_ALMATY = "Asia/Almaty";
257    case ASIA_AMMAN = "Asia/Amman";
258    case ASIA_ANADYR = "Asia/Anadyr";
259    case ASIA_AQTAU = "Asia/Aqtau";
260    case ASIA_AQTOBE = "Asia/Aqtobe";
261    case ASIA_ASHGABAT = "Asia/Ashgabat";
262    case ASIA_ASHKHABAD = "Asia/Ashkhabad";
263    case ASIA_ATYRAU = "Asia/Atyrau";
264    case ASIA_BAGHDAD = "Asia/Baghdad";
265    case ASIA_BAHRAIN = "Asia/Bahrain";
266    case ASIA_BAKU = "Asia/Baku";
267    case ASIA_BANGKOK = "Asia/Bangkok";
268    case ASIA_BARNAUL = "Asia/Barnaul";
269    case ASIA_BEIRUT = "Asia/Beirut";
270    case ASIA_BISHKEK = "Asia/Bishkek";
271    case ASIA_BRUNEI = "Asia/Brunei";
272    case ASIA_CALCUTTA = "Asia/Calcutta";
273    case ASIA_CHITA = "Asia/Chita";
274    case ASIA_CHOIBALSAN = "Asia/Choibalsan";
275    case ASIA_CHONGQING = "Asia/Chongqing";
276    case ASIA_CHUNGKING = "Asia/Chungking";
277    case ASIA_COLOMBO = "Asia/Colombo";
278    case ASIA_DACCA = "Asia/Dacca";
279    case ASIA_DAMASCUS = "Asia/Damascus";
280    case ASIA_DHAKA = "Asia/Dhaka";
281    case ASIA_DILI = "Asia/Dili";
282    case ASIA_DUBAI = "Asia/Dubai";
283    case ASIA_DUSHANBE = "Asia/Dushanbe";
284    case ASIA_FAMAGUSTA = "Asia/Famagusta";
285    case ASIA_GAZA = "Asia/Gaza";
286    case ASIA_HARBIN = "Asia/Harbin";
287    case ASIA_HEBRON = "Asia/Hebron";
288    case ASIA_HO_CHI_MINH = "Asia/Ho_Chi_Minh";
289    case ASIA_HONG_KONG = "Asia/Hong_Kong";
290    case ASIA_HOVD = "Asia/Hovd";
291    case ASIA_IRKUTSK = "Asia/Irkutsk";
292    case ASIA_ISTANBUL = "Asia/Istanbul";
293    case ASIA_JAKARTA = "Asia/Jakarta";
294    case ASIA_JAYAPURA = "Asia/Jayapura";
295    case ASIA_JERUSALEM = "Asia/Jerusalem";
296    case ASIA_KABUL = "Asia/Kabul";
297    case ASIA_KAMCHATKA = "Asia/Kamchatka";
298    case ASIA_KARACHI = "Asia/Karachi";
299    case ASIA_KASHGAR = "Asia/Kashgar";
300    case ASIA_KATHMANDU = "Asia/Kathmandu";
301    case ASIA_KATMANDU = "Asia/Katmandu";
302    case ASIA_KHANDYGA = "Asia/Khandyga";
303    case ASIA_KOLKATA = "Asia/Kolkata";
304    case ASIA_KRASNOYARSK = "Asia/Krasnoyarsk";
305    case ASIA_KUALA_LUMPUR = "Asia/Kuala_Lumpur";
306    case ASIA_KUCHING = "Asia/Kuching";
307    case ASIA_KUWAIT = "Asia/Kuwait";
308    case ASIA_MACAO = "Asia/Macao";
309    case ASIA_MACAU = "Asia/Macau";
310    case ASIA_MAGADAN = "Asia/Magadan";
311    case ASIA_MAKASSAR = "Asia/Makassar";
312    case ASIA_MANILA = "Asia/Manila";
313    case ASIA_MUSCAT = "Asia/Muscat";
314    case ASIA_NICOSIA = "Asia/Nicosia";
315    case ASIA_NOVOKUZNETSK = "Asia/Novokuznetsk";
316    case ASIA_NOVOSIBIRSK = "Asia/Novosibirsk";
317    case ASIA_OMSK = "Asia/Omsk";
318    case ASIA_ORAL = "Asia/Oral";
319    case ASIA_PHNOM_PENH = "Asia/Phnom_Penh";
320    case ASIA_PONTIANAK = "Asia/Pontianak";
321    case ASIA_PYONGYANG = "Asia/Pyongyang";
322    case ASIA_QATAR = "Asia/Qatar";
323    case ASIA_QOSTANAY = "Asia/Qostanay";
324    case ASIA_QYZYLORDA = "Asia/Qyzylorda";
325    case ASIA_RANGOON = "Asia/Rangoon";
326    case ASIA_RIYADH = "Asia/Riyadh";
327    case ASIA_SAIGON = "Asia/Saigon";
328    case ASIA_SAKHALIN = "Asia/Sakhalin";
329    case ASIA_SAMARKAND = "Asia/Samarkand";
330    case ASIA_SEOUL = "Asia/Seoul";
331    case ASIA_SHANGHAI = "Asia/Shanghai";
332    case ASIA_SINGAPORE = "Asia/Singapore";
333    case ASIA_SREDNEKOLYMSK = "Asia/Srednekolymsk";
334    case ASIA_TAIPEI = "Asia/Taipei";
335    case ASIA_TASHKENT = "Asia/Tashkent";
336    case ASIA_TBILISI = "Asia/Tbilisi";
337    case ASIA_TEHRAN = "Asia/Tehran";
338    case ASIA_TEL_AVIV = "Asia/Tel_Aviv";
339    case ASIA_THIMBU = "Asia/Thimbu";
340    case ASIA_THIMPHU = "Asia/Thimphu";
341    case ASIA_TOKYO = "Asia/Tokyo";
342    case ASIA_TOMSK = "Asia/Tomsk";
343    case ASIA_UJUNG_PANDANG = "Asia/Ujung_Pandang";
344    case ASIA_ULAANBAATAR = "Asia/Ulaanbaatar";
345    case ASIA_ULAN_BATOR = "Asia/Ulan_Bator";
346    case ASIA_URUMQI = "Asia/Urumqi";
347    case ASIA_UST_MINUS_NERA = "Asia/Ust-Nera";
348    case ASIA_VIENTIANE = "Asia/Vientiane";
349    case ASIA_VLADIVOSTOK = "Asia/Vladivostok";
350    case ASIA_YAKUTSK = "Asia/Yakutsk";
351    case ASIA_YANGON = "Asia/Yangon";
352    case ASIA_YEKATERINBURG = "Asia/Yekaterinburg";
353    case ASIA_YEREVAN = "Asia/Yerevan";
354    case ATLANTIC_AZORES = "Atlantic/Azores";
355    case ATLANTIC_BERMUDA = "Atlantic/Bermuda";
356    case ATLANTIC_CANARY = "Atlantic/Canary";
357    case ATLANTIC_CAPE_VERDE = "Atlantic/Cape_Verde";
358    case ATLANTIC_FAEROE = "Atlantic/Faeroe";
359    case ATLANTIC_FAROE = "Atlantic/Faroe";
360    case ATLANTIC_JAN_MAYEN = "Atlantic/Jan_Mayen";
361    case ATLANTIC_MADEIRA = "Atlantic/Madeira";
362    case ATLANTIC_REYKJAVIK = "Atlantic/Reykjavik";
363    case ATLANTIC_SOUTH_GEORGIA = "Atlantic/South_Georgia";
364    case ATLANTIC_ST_HELENA = "Atlantic/St_Helena";
365    case ATLANTIC_STANLEY = "Atlantic/Stanley";
366    case AUSTRALIA_ACT = "Australia/ACT";
367    case AUSTRALIA_ADELAIDE = "Australia/Adelaide";
368    case AUSTRALIA_BRISBANE = "Australia/Brisbane";
369    case AUSTRALIA_BROKEN_HILL = "Australia/Broken_Hill";
370    case AUSTRALIA_CANBERRA = "Australia/Canberra";
371    case AUSTRALIA_CURRIE = "Australia/Currie";
372    case AUSTRALIA_DARWIN = "Australia/Darwin";
373    case AUSTRALIA_EUCLA = "Australia/Eucla";
374    case AUSTRALIA_HOBART = "Australia/Hobart";
375    case AUSTRALIA_LHI = "Australia/LHI";
376    case AUSTRALIA_LINDEMAN = "Australia/Lindeman";
377    case AUSTRALIA_LORD_HOWE = "Australia/Lord_Howe";
378    case AUSTRALIA_MELBOURNE = "Australia/Melbourne";
379    case AUSTRALIA_NORTH = "Australia/North";
380    case AUSTRALIA_NSW = "Australia/NSW";
381    case AUSTRALIA_PERTH = "Australia/Perth";
382    case AUSTRALIA_QUEENSLAND = "Australia/Queensland";
383    case AUSTRALIA_SOUTH = "Australia/South";
384    case AUSTRALIA_SYDNEY = "Australia/Sydney";
385    case AUSTRALIA_TASMANIA = "Australia/Tasmania";
386    case AUSTRALIA_VICTORIA = "Australia/Victoria";
387    case AUSTRALIA_WEST = "Australia/West";
388    case AUSTRALIA_YANCOWINNA = "Australia/Yancowinna";
389    case BRAZIL_ACRE = "Brazil/Acre";
390    case BRAZIL_DENORONHA = "Brazil/DeNoronha";
391    case BRAZIL_EAST = "Brazil/East";
392    case BRAZIL_WEST = "Brazil/West";
393    case CANADA_ATLANTIC = "Canada/Atlantic";
394    case CANADA_CENTRAL = "Canada/Central";
395    case CANADA_EASTERN = "Canada/Eastern";
396    case CANADA_MOUNTAIN = "Canada/Mountain";
397    case CANADA_NEWFOUNDLAND = "Canada/Newfoundland";
398    case CANADA_PACIFIC = "Canada/Pacific";
399    case CANADA_SASKATCHEWAN = "Canada/Saskatchewan";
400    case CANADA_YUKON = "Canada/Yukon";
401    case CET = "CET";
402    case CHILE_CONTINENTAL = "Chile/Continental";
403    case CHILE_EASTERISLAND = "Chile/EasterIsland";
404    case CST6CDT = "CST6CDT";
405    case CUBA = "Cuba";
406    case EET = "EET";
407    case EGYPT = "Egypt";
408    case EIRE = "Eire";
409    case EST = "EST";
410    case EST5EDT = "EST5EDT";
411    case ETC_GMT = "Etc/GMT";
412    case ETC_GMT_PLUS_0 = "Etc/GMT+0";
413    case ETC_GMT_PLUS_1 = "Etc/GMT+1";
414    case ETC_GMT_PLUS_10 = "Etc/GMT+10";
415    case ETC_GMT_PLUS_11 = "Etc/GMT+11";
416    case ETC_GMT_PLUS_12 = "Etc/GMT+12";
417    case ETC_GMT_PLUS_2 = "Etc/GMT+2";
418    case ETC_GMT_PLUS_3 = "Etc/GMT+3";
419    case ETC_GMT_PLUS_4 = "Etc/GMT+4";
420    case ETC_GMT_PLUS_5 = "Etc/GMT+5";
421    case ETC_GMT_PLUS_6 = "Etc/GMT+6";
422    case ETC_GMT_PLUS_7 = "Etc/GMT+7";
423    case ETC_GMT_PLUS_8 = "Etc/GMT+8";
424    case ETC_GMT_PLUS_9 = "Etc/GMT+9";
425    case ETC_GMT_MINUS_0 = "Etc/GMT-0";
426    case ETC_GMT_MINUS_1 = "Etc/GMT-1";
427    case ETC_GMT_MINUS_10 = "Etc/GMT-10";
428    case ETC_GMT_MINUS_11 = "Etc/GMT-11";
429    case ETC_GMT_MINUS_12 = "Etc/GMT-12";
430    case ETC_GMT_MINUS_13 = "Etc/GMT-13";
431    case ETC_GMT_MINUS_14 = "Etc/GMT-14";
432    case ETC_GMT_MINUS_2 = "Etc/GMT-2";
433    case ETC_GMT_MINUS_3 = "Etc/GMT-3";
434    case ETC_GMT_MINUS_4 = "Etc/GMT-4";
435    case ETC_GMT_MINUS_5 = "Etc/GMT-5";
436    case ETC_GMT_MINUS_6 = "Etc/GMT-6";
437    case ETC_GMT_MINUS_7 = "Etc/GMT-7";
438    case ETC_GMT_MINUS_8 = "Etc/GMT-8";
439    case ETC_GMT_MINUS_9 = "Etc/GMT-9";
440    case ETC_GMT0 = "Etc/GMT0";
441    case ETC_GREENWICH = "Etc/Greenwich";
442    case ETC_UCT = "Etc/UCT";
443    case ETC_UNIVERSAL = "Etc/Universal";
444    case ETC_UTC = "Etc/UTC";
445    case ETC_ZULU = "Etc/Zulu";
446    case EUROPE_AMSTERDAM = "Europe/Amsterdam";
447    case EUROPE_ANDORRA = "Europe/Andorra";
448    case EUROPE_ASTRAKHAN = "Europe/Astrakhan";
449    case EUROPE_ATHENS = "Europe/Athens";
450    case EUROPE_BELFAST = "Europe/Belfast";
451    case EUROPE_BELGRADE = "Europe/Belgrade";
452    case EUROPE_BERLIN = "Europe/Berlin";
453    case EUROPE_BRATISLAVA = "Europe/Bratislava";
454    case EUROPE_BRUSSELS = "Europe/Brussels";
455    case EUROPE_BUCHAREST = "Europe/Bucharest";
456    case EUROPE_BUDAPEST = "Europe/Budapest";
457    case EUROPE_BUSINGEN = "Europe/Busingen";
458    case EUROPE_CHISINAU = "Europe/Chisinau";
459    case EUROPE_COPENHAGEN = "Europe/Copenhagen";
460    case EUROPE_DUBLIN = "Europe/Dublin";
461    case EUROPE_GIBRALTAR = "Europe/Gibraltar";
462    case EUROPE_GUERNSEY = "Europe/Guernsey";
463    case EUROPE_HELSINKI = "Europe/Helsinki";
464    case EUROPE_ISLE_OF_MAN = "Europe/Isle_of_Man";
465    case EUROPE_ISTANBUL = "Europe/Istanbul";
466    case EUROPE_JERSEY = "Europe/Jersey";
467    case EUROPE_KALININGRAD = "Europe/Kaliningrad";
468    case EUROPE_KIEV = "Europe/Kiev";
469    case EUROPE_KIROV = "Europe/Kirov";
470    case EUROPE_KYIV = "Europe/Kyiv";
471    case EUROPE_LISBON = "Europe/Lisbon";
472    case EUROPE_LJUBLJANA = "Europe/Ljubljana";
473    case EUROPE_LONDON = "Europe/London";
474    case EUROPE_LUXEMBOURG = "Europe/Luxembourg";
475    case EUROPE_MADRID = "Europe/Madrid";
476    case EUROPE_MALTA = "Europe/Malta";
477    case EUROPE_MARIEHAMN = "Europe/Mariehamn";
478    case EUROPE_MINSK = "Europe/Minsk";
479    case EUROPE_MONACO = "Europe/Monaco";
480    case EUROPE_MOSCOW = "Europe/Moscow";
481    case EUROPE_NICOSIA = "Europe/Nicosia";
482    case EUROPE_OSLO = "Europe/Oslo";
483    case EUROPE_PARIS = "Europe/Paris";
484    case EUROPE_PODGORICA = "Europe/Podgorica";
485    case EUROPE_PRAGUE = "Europe/Prague";
486    case EUROPE_RIGA = "Europe/Riga";
487    case EUROPE_ROME = "Europe/Rome";
488    case EUROPE_SAMARA = "Europe/Samara";
489    case EUROPE_SAN_MARINO = "Europe/San_Marino";
490    case EUROPE_SARAJEVO = "Europe/Sarajevo";
491    case EUROPE_SARATOV = "Europe/Saratov";
492    case EUROPE_SIMFEROPOL = "Europe/Simferopol";
493    case EUROPE_SKOPJE = "Europe/Skopje";
494    case EUROPE_SOFIA = "Europe/Sofia";
495    case EUROPE_STOCKHOLM = "Europe/Stockholm";
496    case EUROPE_TALLINN = "Europe/Tallinn";
497    case EUROPE_TIRANE = "Europe/Tirane";
498    case EUROPE_TIRASPOL = "Europe/Tiraspol";
499    case EUROPE_ULYANOVSK = "Europe/Ulyanovsk";
500    case EUROPE_UZHGOROD = "Europe/Uzhgorod";
501    case EUROPE_VADUZ = "Europe/Vaduz";
502    case EUROPE_VATICAN = "Europe/Vatican";
503    case EUROPE_VIENNA = "Europe/Vienna";
504    case EUROPE_VILNIUS = "Europe/Vilnius";
505    case EUROPE_VOLGOGRAD = "Europe/Volgograd";
506    case EUROPE_WARSAW = "Europe/Warsaw";
507    case EUROPE_ZAGREB = "Europe/Zagreb";
508    case EUROPE_ZAPOROZHYE = "Europe/Zaporozhye";
509    case EUROPE_ZURICH = "Europe/Zurich";
510    case FACTORY = "Factory";
511    case GB = "GB";
512    case GB_MINUS_EIRE = "GB-Eire";
513    case GMT = "GMT";
514    case GMT_PLUS_0 = "GMT+0";
515    case GMT_MINUS_0 = "GMT-0";
516    case GMT0 = "GMT0";
517    case GREENWICH = "Greenwich";
518    case HONGKONG = "Hongkong";
519    case HST = "HST";
520    case ICELAND = "Iceland";
521    case INDIAN_ANTANANARIVO = "Indian/Antananarivo";
522    case INDIAN_CHAGOS = "Indian/Chagos";
523    case INDIAN_CHRISTMAS = "Indian/Christmas";
524    case INDIAN_COCOS = "Indian/Cocos";
525    case INDIAN_COMORO = "Indian/Comoro";
526    case INDIAN_KERGUELEN = "Indian/Kerguelen";
527    case INDIAN_MAHE = "Indian/Mahe";
528    case INDIAN_MALDIVES = "Indian/Maldives";
529    case INDIAN_MAURITIUS = "Indian/Mauritius";
530    case INDIAN_MAYOTTE = "Indian/Mayotte";
531    case INDIAN_REUNION = "Indian/Reunion";
532    case IRAN = "Iran";
533    case ISRAEL = "Israel";
534    case JAMAICA = "Jamaica";
535    case JAPAN = "Japan";
536    case KWAJALEIN = "Kwajalein";
537    case LIBYA = "Libya";
538    case MET = "MET";
539    case MEXICO_BAJANORTE = "Mexico/BajaNorte";
540    case MEXICO_BAJASUR = "Mexico/BajaSur";
541    case MEXICO_GENERAL = "Mexico/General";
542    case MST = "MST";
543    case MST7MDT = "MST7MDT";
544    case NAVAJO = "Navajo";
545    case NZ = "NZ";
546    case NZ_MINUS_CHAT = "NZ-CHAT";
547    case PACIFIC_APIA = "Pacific/Apia";
548    case PACIFIC_AUCKLAND = "Pacific/Auckland";
549    case PACIFIC_BOUGAINVILLE = "Pacific/Bougainville";
550    case PACIFIC_CHATHAM = "Pacific/Chatham";
551    case PACIFIC_CHUUK = "Pacific/Chuuk";
552    case PACIFIC_EASTER = "Pacific/Easter";
553    case PACIFIC_EFATE = "Pacific/Efate";
554    case PACIFIC_ENDERBURY = "Pacific/Enderbury";
555    case PACIFIC_FAKAOFO = "Pacific/Fakaofo";
556    case PACIFIC_FIJI = "Pacific/Fiji";
557    case PACIFIC_FUNAFUTI = "Pacific/Funafuti";
558    case PACIFIC_GALAPAGOS = "Pacific/Galapagos";
559    case PACIFIC_GAMBIER = "Pacific/Gambier";
560    case PACIFIC_GUADALCANAL = "Pacific/Guadalcanal";
561    case PACIFIC_GUAM = "Pacific/Guam";
562    case PACIFIC_HONOLULU = "Pacific/Honolulu";
563    case PACIFIC_JOHNSTON = "Pacific/Johnston";
564    case PACIFIC_KANTON = "Pacific/Kanton";
565    case PACIFIC_KIRITIMATI = "Pacific/Kiritimati";
566    case PACIFIC_KOSRAE = "Pacific/Kosrae";
567    case PACIFIC_KWAJALEIN = "Pacific/Kwajalein";
568    case PACIFIC_MAJURO = "Pacific/Majuro";
569    case PACIFIC_MARQUESAS = "Pacific/Marquesas";
570    case PACIFIC_MIDWAY = "Pacific/Midway";
571    case PACIFIC_NAURU = "Pacific/Nauru";
572    case PACIFIC_NIUE = "Pacific/Niue";
573    case PACIFIC_NORFOLK = "Pacific/Norfolk";
574    case PACIFIC_NOUMEA = "Pacific/Noumea";
575    case PACIFIC_PAGO_PAGO = "Pacific/Pago_Pago";
576    case PACIFIC_PALAU = "Pacific/Palau";
577    case PACIFIC_PITCAIRN = "Pacific/Pitcairn";
578    case PACIFIC_POHNPEI = "Pacific/Pohnpei";
579    case PACIFIC_PONAPE = "Pacific/Ponape";
580    case PACIFIC_PORT_MORESBY = "Pacific/Port_Moresby";
581    case PACIFIC_RAROTONGA = "Pacific/Rarotonga";
582    case PACIFIC_SAIPAN = "Pacific/Saipan";
583    case PACIFIC_SAMOA = "Pacific/Samoa";
584    case PACIFIC_TAHITI = "Pacific/Tahiti";
585    case PACIFIC_TARAWA = "Pacific/Tarawa";
586    case PACIFIC_TONGATAPU = "Pacific/Tongatapu";
587    case PACIFIC_TRUK = "Pacific/Truk";
588    case PACIFIC_WAKE = "Pacific/Wake";
589    case PACIFIC_WALLIS = "Pacific/Wallis";
590    case PACIFIC_YAP = "Pacific/Yap";
591    case POLAND = "Poland";
592    case PORTUGAL = "Portugal";
593    case PRC = "PRC";
594    case PST8PDT = "PST8PDT";
595    case ROC = "ROC";
596    case ROK = "ROK";
597    case SINGAPORE = "Singapore";
598    case TURKEY = "Turkey";
599    case UCT = "UCT";
600    case UNIVERSAL = "Universal";
601    case US_ALASKA = "US/Alaska";
602    case US_ALEUTIAN = "US/Aleutian";
603    case US_ARIZONA = "US/Arizona";
604    case US_CENTRAL = "US/Central";
605    case US_EAST_MINUS_INDIANA = "US/East-Indiana";
606    case US_EASTERN = "US/Eastern";
607    case US_HAWAII = "US/Hawaii";
608    case US_INDIANA_MINUS_STARKE = "US/Indiana-Starke";
609    case US_MICHIGAN = "US/Michigan";
610    case US_MOUNTAIN = "US/Mountain";
611    case US_PACIFIC = "US/Pacific";
612    case US_SAMOA = "US/Samoa";
613    case UTC = "UTC";
614    case W_MINUS_SU = "W-SU";
615    case WET = "WET";
616    case ZULU = "Zulu";
617
618    /**
619     * Get the DateTimeZone object for this timezone.
620     */
621    public function toDateTimeZone(): DateTimeZone
622    {
623        return new DateTimeZone($this->value);
624    }
625
626    /**
627     * Get the current UTC offset in seconds for this timezone.
628     */
629    public function getUtcOffset(): int
630    {
631        return $this->toDateTimeZone()
632            ->getOffset(new DateTimeImmutable("now", new DateTimeZone("UTC")));
633    }
634
635    /**
636     * Get the current UTC offset formatted as string (e.g., "+02:00", "-05:00").
637     */
638    public function getUtcOffsetString(): string
639    {
640        $offset = $this->getUtcOffset();
641        $hours = intdiv(abs($offset), 3600);
642        $minutes = intdiv(abs($offset) % 3600, 60);
643        $sign = $offset >= 0 ? "+" : "-";
644
645        return sprintf("%s%02d:%02d", $sign, $hours, $minutes);
646    }
647
648    public function label(): string
649    {
650        return $this->value . ' (' . $this->getUtcOffsetString() . ')';
651    }
652
653    /**
654     * @return string[]
655     */
656    public function labelList(): array
657    {
658        return array_map(fn (self $case) => $case->label(), self::cases());
659    }
660
661    /**
662     * @return array<string, string>
663     */
664    public static function toArray(): array
665    {
666        $result = [];
667
668        foreach (self::cases() as $timezone) {
669            $result[$timezone->value] = $timezone->value;
670        }
671
672        return $result;
673    }
674
675    /**
676     * @return array<string, string>
677     */
678    public static function toArrayWithLabels(): array
679    {
680        $result = [];
681
682        foreach (self::cases() as $timezone) {
683            $result[$timezone->value] = $timezone->label();
684        }
685
686        return $result;
687    }
688}