@@ -242,93 +242,28 @@ public static function dos2unix(int $timestamp) : int
242242 */
243243 public static function timezones () : array
244244 {
245- return ['Kwajalein ' =>'(GMT-12:00) International Date Line West ' ,
246- 'Pacific/Samoa ' =>'(GMT-11:00) Midway Island, Samoa ' ,
247- 'Pacific/Honolulu ' =>'(GMT-10:00) Hawaii ' ,
248- 'America/Anchorage ' =>'(GMT-09:00) Alaska ' ,
249- 'America/Los_Angeles ' =>'(GMT-08:00) Pacific Time (US & Canada) ' ,
250- 'America/Tijuana ' =>'(GMT-08:00) Tijuana, Baja California ' ,
251- 'America/Denver ' =>'(GMT-07:00) Mountain Time (US & Canada) ' ,
252- 'America/Chihuahua ' =>'(GMT-07:00) Chihuahua, La Paz, Mazatlan ' ,
253- 'America/Phoenix ' =>'(GMT-07:00) Arizona ' ,
254- 'America/Regina ' =>'(GMT-06:00) Saskatchewan ' ,
255- 'America/Tegucigalpa ' =>'(GMT-06:00) Central America ' ,
256- 'America/Chicago ' =>'(GMT-06:00) Central Time (US & Canada) ' ,
257- 'America/Mexico_City ' =>'(GMT-06:00) Guadalajara, Mexico City, Monterrey ' ,
258- 'America/New_York ' =>'(GMT-05:00) Eastern Time (US & Canada) ' ,
259- 'America/Bogota ' =>'(GMT-05:00) Bogota, Lima, Quito, Rio Branco ' ,
260- 'America/Indiana/Indianapolis ' =>'(GMT-05:00) Indiana (East) ' ,
261- 'America/Caracas ' =>'(GMT-04:30) Caracas ' ,
262- 'America/Halifax ' =>'(GMT-04:00) Atlantic Time (Canada) ' ,
263- 'America/Manaus ' =>'(GMT-04:00) Manaus ' ,
264- 'America/Santiago ' =>'(GMT-04:00) Santiago ' ,
265- 'America/La_Paz ' =>'(GMT-04:00) La Paz ' ,
266- 'America/St_Johns ' =>'(GMT-03:30) Newfoundland ' ,
267- 'America/Argentina/Buenos_Aires ' =>'(GMT-03:00) Buenos Aires ' ,
268- 'America/Sao_Paulo ' =>'(GMT-03:00) Brasilia ' ,
269- 'America/Godthab ' =>'(GMT-03:00) Greenland ' ,
270- 'America/Montevideo ' =>'(GMT-03:00) Montevideo ' ,
271- 'America/Argentina/Buenos_Aires ' =>'(GMT-03:00) Georgetown ' ,
272- 'Atlantic/South_Georgia ' =>'(GMT-02:00) Mid-Atlantic ' ,
273- 'Atlantic/Azores ' =>'(GMT-01:00) Azores ' ,
274- 'Atlantic/Cape_Verde ' =>'(GMT-01:00) Cape Verde Is. ' ,
275- 'Europe/London ' =>'(GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London ' ,
276- 'Atlantic/Reykjavik ' =>'(GMT) Monrovia, Reykjavik ' ,
277- 'Africa/Casablanca ' =>'(GMT) Casablanca ' ,
278- 'Europe/Belgrade ' =>'(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague ' ,
279- 'Europe/Sarajevo ' =>'(GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb ' ,
280- 'Europe/Brussels ' =>'(GMT+01:00) Brussels, Copenhagen, Madrid, Paris ' ,
281- 'Africa/Algiers ' =>'(GMT+01:00) West Central Africa ' ,
282- 'Europe/Amsterdam ' =>'(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna ' ,
283- 'Africa/Cairo ' =>'(GMT+02:00) Cairo ' ,
284- 'Europe/Helsinki ' =>'(GMT+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius ' ,
285- 'Europe/Athens ' =>'(GMT+02:00) Athens, Bucharest, Istanbul ' ,
286- 'Asia/Jerusalem ' =>'(GMT+02:00) Jerusalem ' ,
287- 'Asia/Amman ' =>'(GMT+02:00) Amman ' ,
288- 'Asia/Beirut ' =>'(GMT+02:00) Beirut ' ,
289- 'Africa/Windhoek ' =>'(GMT+02:00) Windhoek ' ,
290- 'Africa/Harare ' =>'(GMT+02:00) Harare, Pretoria ' ,
291- 'Asia/Kuwait ' =>'(GMT+03:00) Kuwait, Riyadh ' ,
292- 'Asia/Baghdad ' =>'(GMT+03:00) Baghdad ' ,
293- 'Europe/Minsk ' =>'(GMT+03:00) Minsk ' ,
294- 'Africa/Nairobi ' =>'(GMT+03:00) Nairobi ' ,
295- 'Asia/Tbilisi ' =>'(GMT+03:00) Tbilisi ' ,
296- 'Asia/Tehran ' =>'(GMT+03:30) Tehran ' ,
297- 'Asia/Muscat ' =>'(GMT+04:00) Abu Dhabi, Muscat ' ,
298- 'Asia/Baku ' =>'(GMT+04:00) Baku ' ,
299- 'Europe/Moscow ' =>'(GMT+04:00) Moscow, St. Petersburg, Volgograd ' ,
300- 'Asia/Yerevan ' =>'(GMT+04:00) Yerevan ' ,
301- 'Asia/Karachi ' =>'(GMT+05:00) Islamabad, Karachi ' ,
302- 'Asia/Tashkent ' =>'(GMT+05:00) Tashkent ' ,
303- 'Asia/Kolkata ' =>'(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi ' ,
304- 'Asia/Colombo ' =>'(GMT+05:30) Sri Jayawardenepura ' ,
305- 'Asia/Katmandu ' =>'(GMT+05:45) Kathmandu ' ,
306- 'Asia/Dhaka ' =>'(GMT+06:00) Astana, Dhaka ' ,
307- 'Asia/Yekaterinburg ' =>'(GMT+06:00) Ekaterinburg ' ,
308- 'Asia/Rangoon ' =>'(GMT+06:30) Yangon (Rangoon) ' ,
309- 'Asia/Novosibirsk ' =>'(GMT+07:00) Almaty, Novosibirsk ' ,
310- 'Asia/Bangkok ' =>'(GMT+07:00) Bangkok, Hanoi, Jakarta ' ,
311- 'Asia/Beijing ' =>'(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi ' ,
312- 'Asia/Ulaanbaatar ' =>'(GMT+08:00) Irkutsk, Ulaan Bataar ' ,
313- 'Asia/Krasnoyarsk ' =>'(GMT+08:00) Krasnoyarsk ' ,
314- 'Asia/Kuala_Lumpur ' =>'(GMT+08:00) Kuala Lumpur, Singapore ' ,
315- 'Asia/Taipei ' =>'(GMT+08:00) Taipei ' ,
316- 'Australia/Perth ' =>'(GMT+08:00) Perth ' ,
317- 'Asia/Seoul ' =>'(GMT+09:00) Seoul ' ,
318- 'Asia/Tokyo ' =>'(GMT+09:00) Osaka, Sapporo, Tokyo ' ,
319- 'Australia/Darwin ' =>'(GMT+09:30) Darwin ' ,
320- 'Australia/Adelaide ' =>'(GMT+09:30) Adelaide ' ,
321- 'Australia/Sydney ' =>'(GMT+10:00) Canberra, Melbourne, Sydney ' ,
322- 'Australia/Brisbane ' =>'(GMT+10:00) Brisbane ' ,
323- 'Australia/Hobart ' =>'(GMT+10:00) Hobart ' ,
324- 'Asia/Yakutsk ' =>'(GMT+10:00) Yakutsk ' ,
325- 'Pacific/Guam ' =>'(GMT+10:00) Guam, Port Moresby ' ,
326- 'Asia/Vladivostok ' =>'(GMT+11:00) Vladivostok ' ,
327- 'Pacific/Fiji ' =>'(GMT+12:00) Fiji, Kamchatka, Marshall Is. ' ,
328- 'Asia/Magadan ' =>'(GMT+12:00) Magadan, Solomon Is., New Caledonia ' ,
329- 'Pacific/Auckland ' =>'(GMT+12:00) Auckland, Wellington ' ,
330- 'Pacific/Tongatapu ' =>'(GMT+13:00) Nukualofa '
331- ];
245+ $ timezones = \DateTimeZone::listIdentifiers (\DateTimeZone::ALL );
246+ $ offsets = [];
247+ $ testDate = new \DateTime ();
248+
249+ foreach ($ timezones as $ zone ) {
250+ $ tz = new \DateTimeZone ($ zone );
251+ $ offsets [$ zone ] = $ tz ->getOffset ($ testDate );
252+ }
253+
254+ asort ($ offsets );
255+
256+ $ timezone_list = [];
257+ foreach ($ offsets as $ timezone => $ offset ) {
258+ $ offset_prefix = $ offset < 0 ? '- ' : '+ ' ;
259+ $ offset_formatted = gmdate ('H:i ' , abs ($ offset ));
260+
261+ $ pretty_offset = "UTC $ {offset_prefix}$ {offset_formatted}" ;
262+
263+ $ timezone_list [$ timezone ] = "( $ {pretty_offset}) " .str_replace ('_ ' , ' ' , $ timezone );
264+ }
265+
266+ return $ timezone_list ;
332267 }
333268
334269 /**
0 commit comments