jrobinsonc
2/13/2015 - 4:58 PM

Generates a list of all timezone identifiers, with their offset & made (slightly) more human-readable

Generates a list of all timezone identifiers, with their offset & made (slightly) more human-readable

<?php

// formatted for a <select> box - keys and human-readable values

[
  "Pacific/Niue"                   => "UTC-11:00 (Niue, Pacific)",
  "Pacific/Pago_Pago"              => "UTC-11:00 (Pago Pago, Pacific)",
  "Pacific/Midway"                 => "UTC-11:00 (Midway, Pacific)",
  "Pacific/Honolulu"               => "UTC-10:00 (Honolulu, Pacific)",
  "America/Adak"                   => "UTC-10:00 (Adak, America)",
  "Pacific/Tahiti"                 => "UTC-10:00 (Tahiti, Pacific)",
  "Pacific/Rarotonga"              => "UTC-10:00 (Rarotonga, Pacific)",
  "Pacific/Johnston"               => "UTC-10:00 (Johnston, Pacific)",
  "Pacific/Marquesas"              => "UTC-09:30 (Marquesas, Pacific)",
  "America/Anchorage"              => "UTC-09:00 (Anchorage, America)",
  "America/Nome"                   => "UTC-09:00 (Nome, America)",
  "America/Juneau"                 => "UTC-09:00 (Juneau, America)",
  "America/Yakutat"                => "UTC-09:00 (Yakutat, America)",
  "America/Sitka"                  => "UTC-09:00 (Sitka, America)",
  "Pacific/Gambier"                => "UTC-09:00 (Gambier, Pacific)",
  "America/Santa_Isabel"           => "UTC-08:00 (Santa Isabel, America)",
  "Pacific/Pitcairn"               => "UTC-08:00 (Pitcairn, Pacific)",
  "America/Whitehorse"             => "UTC-08:00 (Whitehorse, America)",
  "America/Vancouver"              => "UTC-08:00 (Vancouver, America)",
  "America/Los_Angeles"            => "UTC-08:00 (Los Angeles, America)",
  "America/Tijuana"                => "UTC-08:00 (Tijuana, America)",
  "America/Dawson"                 => "UTC-08:00 (Dawson, America)",
  "America/Metlakatla"             => "UTC-08:00 (Metlakatla, America)",
  "America/Inuvik"                 => "UTC-07:00 (Inuvik, America)",
  "America/Hermosillo"             => "UTC-07:00 (Hermosillo, America)",
  "America/Edmonton"               => "UTC-07:00 (Edmonton, America)",
  "America/Denver"                 => "UTC-07:00 (Denver, America)",
  "America/Yellowknife"            => "UTC-07:00 (Yellowknife, America)",
  "America/Mazatlan"               => "UTC-07:00 (Mazatlan, America)",
  "America/Dawson_Creek"           => "UTC-07:00 (Dawson Creek, America)",
  "America/Phoenix"                => "UTC-07:00 (Phoenix, America)",
  "America/Chihuahua"              => "UTC-07:00 (Chihuahua, America)",
  "America/Boise"                  => "UTC-07:00 (Boise, America)",
  "America/Cambridge_Bay"          => "UTC-07:00 (Cambridge Bay, America)",
  "America/Creston"                => "UTC-07:00 (Creston, America)",
  "America/Ojinaga"                => "UTC-07:00 (Ojinaga, America)",
  "America/El_Salvador"            => "UTC-06:00 (El Salvador, America)",
  "America/Guatemala"              => "UTC-06:00 (Guatemala, America)",
  "America/Costa_Rica"             => "UTC-06:00 (Costa Rica, America)",
  "America/Cancun"                 => "UTC-06:00 (Cancun, America)",
  "America/Belize"                 => "UTC-06:00 (Belize, America)",
  "America/Matamoros"              => "UTC-06:00 (Matamoros, America)",
  "America/North_Dakota/New_Salem" => "UTC-06:00 (New Salem, North Dakota, America)",
  "America/North_Dakota/Center"    => "UTC-06:00 (Center, North Dakota, America)",
  "America/Rainy_River"            => "UTC-06:00 (Rainy River, America)",
  "America/Rankin_Inlet"           => "UTC-06:00 (Rankin Inlet, America)",
  "America/Resolute"               => "UTC-06:00 (Resolute, America)",
  "America/Regina"                 => "UTC-06:00 (Regina, America)",
  "America/North_Dakota/Beulah"    => "UTC-06:00 (Beulah, North Dakota, America)",
  "America/Monterrey"              => "UTC-06:00 (Monterrey, America)",
  "America/Managua"                => "UTC-06:00 (Managua, America)",
  "America/Indiana/Tell_City"      => "UTC-06:00 (Tell City, Indiana, America)",
  "America/Bahia_Banderas"         => "UTC-06:00 (Bahia Banderas, America)",
  "America/Menominee"              => "UTC-06:00 (Menominee, America)",
  "America/Mexico_City"            => "UTC-06:00 (Mexico City, America)",
  "America/Merida"                 => "UTC-06:00 (Merida, America)",
  "America/Indiana/Knox"           => "UTC-06:00 (Knox, Indiana, America)",
  "America/Chicago"                => "UTC-06:00 (Chicago, America)",
  "America/Winnipeg"               => "UTC-06:00 (Winnipeg, America)",
  "America/Swift_Current"          => "UTC-06:00 (Swift Current, America)",
  "America/Tegucigalpa"            => "UTC-06:00 (Tegucigalpa, America)",
  "Pacific/Galapagos"              => "UTC-06:00 (Galapagos, Pacific)",
  "America/Indiana/Petersburg"     => "UTC-05:00 (Petersburg, Indiana, America)",
  "America/Indiana/Vevay"          => "UTC-05:00 (Vevay, Indiana, America)",
  "America/Indiana/Vincennes"      => "UTC-05:00 (Vincennes, Indiana, America)",
  "America/Indiana/Marengo"        => "UTC-05:00 (Marengo, Indiana, America)",
  "America/Indiana/Winamac"        => "UTC-05:00 (Winamac, Indiana, America)",
  "America/Havana"                 => "UTC-05:00 (Havana, America)",
  "America/Eirunepe"               => "UTC-05:00 (Eirunepe, America)",
  "America/Grand_Turk"             => "UTC-05:00 (Grand Turk, America)",
  "America/Guayaquil"              => "UTC-05:00 (Guayaquil, America)",
  "America/Thunder_Bay"            => "UTC-05:00 (Thunder Bay, America)",
  "America/Indiana/Indianapolis"   => "UTC-05:00 (Indianapolis, Indiana, America)",
  "America/Iqaluit"                => "UTC-05:00 (Iqaluit, America)",
  "America/Pangnirtung"            => "UTC-05:00 (Pangnirtung, America)",
  "America/Panama"                 => "UTC-05:00 (Panama, America)",
  "America/Port-au-Prince"         => "UTC-05:00 (Port-au-Prince, America)",
  "Pacific/Easter"                 => "UTC-05:00 (Easter, Pacific)",
  "America/Rio_Branco"             => "UTC-05:00 (Rio Branco, America)",
  "America/Nipigon"                => "UTC-05:00 (Nipigon, America)",
  "America/New_York"               => "UTC-05:00 (New York, America)",
  "America/Kentucky/Louisville"    => "UTC-05:00 (Louisville, Kentucky, America)",
  "America/Jamaica"                => "UTC-05:00 (Jamaica, America)",
  "America/Kentucky/Monticello"    => "UTC-05:00 (Monticello, Kentucky, America)",
  "America/Lima"                   => "UTC-05:00 (Lima, America)",
  "America/Nassau"                 => "UTC-05:00 (Nassau, America)",
  "America/Detroit"                => "UTC-05:00 (Detroit, America)",
  "America/Toronto"                => "UTC-05:00 (Toronto, America)",
  "America/Bogota"                 => "UTC-05:00 (Bogota, America)",
  "America/Atikokan"               => "UTC-05:00 (Atikokan, America)",
  "America/Cayman"                 => "UTC-05:00 (Cayman, America)",
  "America/Caracas"                => "UTC-04:30 (Caracas, America)",
  "America/Port_of_Spain"          => "UTC-04:00 (Port of Spain, America)",
  "America/Barbados"               => "UTC-04:00 (Barbados, America)",
  "Atlantic/Bermuda"               => "UTC-04:00 (Bermuda, Atlantic)",
  "America/Tortola"                => "UTC-04:00 (Tortola, America)",
  "America/Boa_Vista"              => "UTC-04:00 (Boa Vista, America)",
  "America/Anguilla"               => "UTC-04:00 (Anguilla, America)",
  "America/Moncton"                => "UTC-04:00 (Moncton, America)",
  "America/Porto_Velho"            => "UTC-04:00 (Porto Velho, America)",
  "America/Blanc-Sablon"           => "UTC-04:00 (Blanc-Sablon, America)",
  "America/Aruba"                  => "UTC-04:00 (Aruba, America)",
  "America/Manaus"                 => "UTC-04:00 (Manaus, America)",
  "America/Marigot"                => "UTC-04:00 (Marigot, America)",
  "America/Martinique"             => "UTC-04:00 (Martinique, America)",
  "America/Lower_Princes"          => "UTC-04:00 (Lower Princes, America)",
  "America/St_Barthelemy"          => "UTC-04:00 (St Barthelemy, America)",
  "America/Halifax"                => "UTC-04:00 (Halifax, America)",
  "America/Kralendijk"             => "UTC-04:00 (Kralendijk, America)",
  "America/La_Paz"                 => "UTC-04:00 (La Paz, America)",
  "America/Montserrat"             => "UTC-04:00 (Montserrat, America)",
  "America/Antigua"                => "UTC-04:00 (Antigua, America)",
  "America/Guyana"                 => "UTC-04:00 (Guyana, America)",
  "America/St_Lucia"               => "UTC-04:00 (St Lucia, America)",
  "America/St_Thomas"              => "UTC-04:00 (St Thomas, America)",
  "America/Dominica"               => "UTC-04:00 (Dominica, America)",
  "America/St_Vincent"             => "UTC-04:00 (St Vincent, America)",
  "America/Santo_Domingo"          => "UTC-04:00 (Santo Domingo, America)",
  "America/Glace_Bay"              => "UTC-04:00 (Glace Bay, America)",
  "America/Curacao"                => "UTC-04:00 (Curacao, America)",
  "America/St_Kitts"               => "UTC-04:00 (St Kitts, America)",
  "America/Thule"                  => "UTC-04:00 (Thule, America)",
  "America/Guadeloupe"             => "UTC-04:00 (Guadeloupe, America)",
  "America/Goose_Bay"              => "UTC-04:00 (Goose Bay, America)",
  "America/Puerto_Rico"            => "UTC-04:00 (Puerto Rico, America)",
  "America/Grenada"                => "UTC-04:00 (Grenada, America)",
  "America/St_Johns"               => "UTC-03:30 (St Johns, America)",
  "America/Argentina/Tucuman"      => "UTC-03:00 (Tucuman, Argentina, America)",
  "America/Argentina/San_Juan"     => "UTC-03:00 (San Juan, Argentina, America)",
  "America/Santarem"               => "UTC-03:00 (Santarem, America)",
  "America/Santiago"               => "UTC-03:00 (Santiago, America)",
  "America/Argentina/San_Luis"     => "UTC-03:00 (San Luis, Argentina, America)",
  "America/Argentina/Salta"        => "UTC-03:00 (Salta, Argentina, America)",
  "America/Argentina/La_Rioja"     => "UTC-03:00 (La Rioja, Argentina, America)",
  "America/Recife"                 => "UTC-03:00 (Recife, America)",
  "America/Miquelon"               => "UTC-03:00 (Miquelon, America)",
  "America/Argentina/Mendoza"      => "UTC-03:00 (Mendoza, Argentina, America)",
  "America/Paramaribo"             => "UTC-03:00 (Paramaribo, America)",
  "Atlantic/Stanley"               => "UTC-03:00 (Stanley, Atlantic)",
  "America/Argentina/Jujuy"        => "UTC-03:00 (Jujuy, Argentina, America)",
  "America/Argentina/Rio_Gallegos" => "UTC-03:00 (Rio Gallegos, Argentina, America)",
  "America/Argentina/Cordoba"      => "UTC-03:00 (Cordoba, Argentina, America)",
  "America/Argentina/Ushuaia"      => "UTC-03:00 (Ushuaia, Argentina, America)",
  "America/Araguaina"              => "UTC-03:00 (Araguaina, America)",
  "America/Belem"                  => "UTC-03:00 (Belem, America)",
  "America/Argentina/Buenos_Aires" => "UTC-03:00 (Buenos Aires, Argentina, America)",
  "America/Bahia"                  => "UTC-03:00 (Bahia, America)",
  "America/Argentina/Catamarca"    => "UTC-03:00 (Catamarca, Argentina, America)",
  "America/Campo_Grande"           => "UTC-03:00 (Campo Grande, America)",
  "America/Cuiaba"                 => "UTC-03:00 (Cuiaba, America)",
  "America/Cayenne"                => "UTC-03:00 (Cayenne, America)",
  "America/Fortaleza"              => "UTC-03:00 (Fortaleza, America)",
  "America/Godthab"                => "UTC-03:00 (Godthab, America)",
  "America/Asuncion"               => "UTC-03:00 (Asuncion, America)",
  "Antarctica/Palmer"              => "UTC-03:00 (Palmer, Antarctica)",
  "America/Maceio"                 => "UTC-03:00 (Maceio, America)",
  "Antarctica/Rothera"             => "UTC-03:00 (Rothera, Antarctica)",
  "Atlantic/South_Georgia"         => "UTC-02:00 (South Georgia, Atlantic)",
  "America/Montevideo"             => "UTC-02:00 (Montevideo, America)",
  "America/Sao_Paulo"              => "UTC-02:00 (Sao Paulo, America)",
  "America/Noronha"                => "UTC-02:00 (Noronha, America)",
  "Atlantic/Cape_Verde"            => "UTC-01:00 (Cape Verde, Atlantic)",
  "America/Scoresbysund"           => "UTC-01:00 (Scoresbysund, America)",
  "Atlantic/Azores"                => "UTC-01:00 (Azores, Atlantic)",
  "Atlantic/Canary"                => "UTC (Canary, Atlantic)",
  "Atlantic/Reykjavik"             => "UTC (Reykjavik, Atlantic)",
  "Europe/Guernsey"                => "UTC (Guernsey, Europe)",
  "Europe/Dublin"                  => "UTC (Dublin, Europe)",
  "Atlantic/Madeira"               => "UTC (Madeira, Atlantic)",
  "Europe/London"                  => "UTC (London, Europe)",
  "Atlantic/Faroe"                 => "UTC (Faroe, Atlantic)",
  "Atlantic/St_Helena"             => "UTC (St Helena, Atlantic)",
  "Europe/Isle_of_Man"             => "UTC (Isle of Man, Europe)",
  "Europe/Jersey"                  => "UTC (Jersey, Europe)",
  "Europe/Lisbon"                  => "UTC (Lisbon, Europe)",
  "Africa/Abidjan"                 => "UTC (Abidjan, Africa)",
  "Antarctica/Troll"               => "UTC (Troll, Antarctica)",
  "Africa/Dakar"                   => "UTC (Dakar, Africa)",
  "America/Danmarkshavn"           => "UTC (Danmarkshavn, America)",
  "Africa/Freetown"                => "UTC (Freetown, Africa)",
  "Africa/Lome"                    => "UTC (Lome, Africa)",
  "Africa/Conakry"                 => "UTC (Conakry, Africa)",
  "Africa/Casablanca"              => "UTC (Casablanca, Africa)",
  "Africa/Accra"                   => "UTC (Accra, Africa)",
  "Africa/Bamako"                  => "UTC (Bamako, Africa)",
  "Africa/Banjul"                  => "UTC (Banjul, Africa)",
  "Africa/Bissau"                  => "UTC (Bissau, Africa)",
  "Africa/Monrovia"                => "UTC (Monrovia, Africa)",
  "Africa/El_Aaiun"                => "UTC (El Aaiun, Africa)",
  "Africa/Sao_Tome"                => "UTC (Sao Tome, Africa)",
  "Africa/Ouagadougou"             => "UTC (Ouagadougou, Africa)",
  "Africa/Nouakchott"              => "UTC (Nouakchott, Africa)",
  "Europe/Luxembourg"              => "UTC+01:00 (Luxembourg, Europe)",
  "Europe/Madrid"                  => "UTC+01:00 (Madrid, Europe)",
  "Europe/Ljubljana"               => "UTC+01:00 (Ljubljana, Europe)",
  "Africa/Tunis"                   => "UTC+01:00 (Tunis, Africa)",
  "Europe/Gibraltar"               => "UTC+01:00 (Gibraltar, Europe)",
  "Africa/Ceuta"                   => "UTC+01:00 (Ceuta, Africa)",
  "Europe/Malta"                   => "UTC+01:00 (Malta, Europe)",
  "Europe/Prague"                  => "UTC+01:00 (Prague, Europe)",
  "Europe/Rome"                    => "UTC+01:00 (Rome, Europe)",
  "Europe/San_Marino"              => "UTC+01:00 (San Marino, Europe)",
  "Europe/Podgorica"               => "UTC+01:00 (Podgorica, Europe)",
  "Europe/Paris"                   => "UTC+01:00 (Paris, Europe)",
  "Europe/Monaco"                  => "UTC+01:00 (Monaco, Europe)",
  "Europe/Oslo"                    => "UTC+01:00 (Oslo, Europe)",
  "Europe/Zurich"                  => "UTC+01:00 (Zurich, Europe)",
  "Europe/Copenhagen"              => "UTC+01:00 (Copenhagen, Europe)",
  "Africa/Niamey"                  => "UTC+01:00 (Niamey, Africa)",
  "Africa/Ndjamena"                => "UTC+01:00 (Ndjamena, Africa)",
  "Europe/Zagreb"                  => "UTC+01:00 (Zagreb, Europe)",
  "Africa/Douala"                  => "UTC+01:00 (Douala, Africa)",
  "Africa/Brazzaville"             => "UTC+01:00 (Brazzaville, Africa)",
  "Europe/Amsterdam"               => "UTC+01:00 (Amsterdam, Europe)",
  "Europe/Andorra"                 => "UTC+01:00 (Andorra, Europe)",
  "Europe/Belgrade"                => "UTC+01:00 (Belgrade, Europe)",
  "Europe/Berlin"                  => "UTC+01:00 (Berlin, Europe)",
  "Europe/Busingen"                => "UTC+01:00 (Busingen, Europe)",
  "Africa/Bangui"                  => "UTC+01:00 (Bangui, Africa)",
  "Europe/Budapest"                => "UTC+01:00 (Budapest, Europe)",
  "Europe/Warsaw"                  => "UTC+01:00 (Warsaw, Europe)",
  "Europe/Bratislava"              => "UTC+01:00 (Bratislava, Europe)",
  "Europe/Brussels"                => "UTC+01:00 (Brussels, Europe)",
  "Europe/Sarajevo"                => "UTC+01:00 (Sarajevo, Europe)",
  "Africa/Porto-Novo"              => "UTC+01:00 (Porto-Novo, Africa)",
  "Europe/Vatican"                 => "UTC+01:00 (Vatican, Europe)",
  "Arctic/Longyearbyen"            => "UTC+01:00 (Longyearbyen, Arctic)",
  "Europe/Tirane"                  => "UTC+01:00 (Tirane, Europe)",
  "Europe/Stockholm"               => "UTC+01:00 (Stockholm, Europe)",
  "Africa/Kinshasa"                => "UTC+01:00 (Kinshasa, Africa)",
  "Africa/Luanda"                  => "UTC+01:00 (Luanda, Africa)",
  "Europe/Vienna"                  => "UTC+01:00 (Vienna, Europe)",
  "Africa/Algiers"                 => "UTC+01:00 (Algiers, Africa)",
  "Africa/Libreville"              => "UTC+01:00 (Libreville, Africa)",
  "Africa/Lagos"                   => "UTC+01:00 (Lagos, Africa)",
  "Africa/Malabo"                  => "UTC+01:00 (Malabo, Africa)",
  "Europe/Vaduz"                   => "UTC+01:00 (Vaduz, Europe)",
  "Europe/Skopje"                  => "UTC+01:00 (Skopje, Europe)",
  "Africa/Kigali"                  => "UTC+02:00 (Kigali, Africa)",
  "Europe/Athens"                  => "UTC+02:00 (Athens, Europe)",
  "Asia/Beirut"                    => "UTC+02:00 (Beirut, Asia)",
  "Asia/Gaza"                      => "UTC+02:00 (Gaza, Asia)",
  "Africa/Cairo"                   => "UTC+02:00 (Cairo, Africa)",
  "Asia/Hebron"                    => "UTC+02:00 (Hebron, Asia)",
  "Europe/Helsinki"                => "UTC+02:00 (Helsinki, Europe)",
  "Europe/Riga"                    => "UTC+02:00 (Riga, Europe)",
  "Europe/Zaporozhye"              => "UTC+02:00 (Zaporozhye, Europe)",
  "Africa/Mbabane"                 => "UTC+02:00 (Mbabane, Africa)",
  "Africa/Blantyre"                => "UTC+02:00 (Blantyre, Africa)",
  "Europe/Vilnius"                 => "UTC+02:00 (Vilnius, Europe)",
  "Europe/Bucharest"               => "UTC+02:00 (Bucharest, Europe)",
  "Africa/Tripoli"                 => "UTC+02:00 (Tripoli, Africa)",
  "Asia/Nicosia"                   => "UTC+02:00 (Nicosia, Asia)",
  "Asia/Damascus"                  => "UTC+02:00 (Damascus, Asia)",
  "Europe/Chisinau"                => "UTC+02:00 (Chisinau, Europe)",
  "Europe/Istanbul"                => "UTC+02:00 (Istanbul, Europe)",
  "Europe/Tallinn"                 => "UTC+02:00 (Tallinn, Europe)",
  "Europe/Sofia"                   => "UTC+02:00 (Sofia, Europe)",
  "Africa/Johannesburg"            => "UTC+02:00 (Johannesburg, Africa)",
  "Africa/Lubumbashi"              => "UTC+02:00 (Lubumbashi, Africa)",
  "Africa/Maseru"                  => "UTC+02:00 (Maseru, Africa)",
  "Africa/Maputo"                  => "UTC+02:00 (Maputo, Africa)",
  "Africa/Lusaka"                  => "UTC+02:00 (Lusaka, Africa)",
  "Europe/Mariehamn"               => "UTC+02:00 (Mariehamn, Europe)",
  "Africa/Gaborone"                => "UTC+02:00 (Gaborone, Africa)",
  "Europe/Uzhgorod"                => "UTC+02:00 (Uzhgorod, Europe)",
  "Africa/Windhoek"                => "UTC+02:00 (Windhoek, Africa)",
  "Europe/Kiev"                    => "UTC+02:00 (Kiev, Europe)",
  "Asia/Jerusalem"                 => "UTC+02:00 (Jerusalem, Asia)",
  "Asia/Amman"                     => "UTC+02:00 (Amman, Asia)",
  "Africa/Bujumbura"               => "UTC+02:00 (Bujumbura, Africa)",
  "Africa/Harare"                  => "UTC+02:00 (Harare, Africa)",
  "Europe/Kaliningrad"             => "UTC+02:00 (Kaliningrad, Europe)",
  "Europe/Volgograd"               => "UTC+03:00 (Volgograd, Europe)",
  "Africa/Nairobi"                 => "UTC+03:00 (Nairobi, Africa)",
  "Indian/Mayotte"                 => "UTC+03:00 (Mayotte, Indian)",
  "Africa/Juba"                    => "UTC+03:00 (Juba, Africa)",
  "Africa/Kampala"                 => "UTC+03:00 (Kampala, Africa)",
  "Africa/Khartoum"                => "UTC+03:00 (Khartoum, Africa)",
  "Africa/Mogadishu"               => "UTC+03:00 (Mogadishu, Africa)",
  "Antarctica/Syowa"               => "UTC+03:00 (Syowa, Antarctica)",
  "Indian/Antananarivo"            => "UTC+03:00 (Antananarivo, Indian)",
  "Indian/Comoro"                  => "UTC+03:00 (Comoro, Indian)",
  "Asia/Aden"                      => "UTC+03:00 (Aden, Asia)",
  "Africa/Asmara"                  => "UTC+03:00 (Asmara, Africa)",
  "Europe/Minsk"                   => "UTC+03:00 (Minsk, Europe)",
  "Asia/Bahrain"                   => "UTC+03:00 (Bahrain, Asia)",
  "Europe/Moscow"                  => "UTC+03:00 (Moscow, Europe)",
  "Asia/Baghdad"                   => "UTC+03:00 (Baghdad, Asia)",
  "Africa/Dar_es_Salaam"           => "UTC+03:00 (Dar es Salaam, Africa)",
  "Asia/Kuwait"                    => "UTC+03:00 (Kuwait, Asia)",
  "Asia/Qatar"                     => "UTC+03:00 (Qatar, Asia)",
  "Africa/Addis_Ababa"             => "UTC+03:00 (Addis Ababa, Africa)",
  "Europe/Simferopol"              => "UTC+03:00 (Simferopol, Europe)",
  "Asia/Riyadh"                    => "UTC+03:00 (Riyadh, Asia)",
  "Africa/Djibouti"                => "UTC+03:00 (Djibouti, Africa)",
  "Asia/Tehran"                    => "UTC+03:30 (Tehran, Asia)",
  "Asia/Baku"                      => "UTC+04:00 (Baku, Asia)",
  "Asia/Dubai"                     => "UTC+04:00 (Dubai, Asia)",
  "Indian/Mauritius"               => "UTC+04:00 (Mauritius, Indian)",
  "Europe/Samara"                  => "UTC+04:00 (Samara, Europe)",
  "Asia/Muscat"                    => "UTC+04:00 (Muscat, Asia)",
  "Indian/Reunion"                 => "UTC+04:00 (Reunion, Indian)",
  "Indian/Mahe"                    => "UTC+04:00 (Mahe, Indian)",
  "Asia/Tbilisi"                   => "UTC+04:00 (Tbilisi, Asia)",
  "Asia/Yerevan"                   => "UTC+04:00 (Yerevan, Asia)",
  "Asia/Kabul"                     => "UTC+04:30 (Kabul, Asia)",
  "Indian/Kerguelen"               => "UTC+05:00 (Kerguelen, Indian)",
  "Asia/Tashkent"                  => "UTC+05:00 (Tashkent, Asia)",
  "Asia/Ashgabat"                  => "UTC+05:00 (Ashgabat, Asia)",
  "Asia/Dushanbe"                  => "UTC+05:00 (Dushanbe, Asia)",
  "Asia/Karachi"                   => "UTC+05:00 (Karachi, Asia)",
  "Asia/Oral"                      => "UTC+05:00 (Oral, Asia)",
  "Asia/Samarkand"                 => "UTC+05:00 (Samarkand, Asia)",
  "Asia/Aqtobe"                    => "UTC+05:00 (Aqtobe, Asia)",
  "Indian/Maldives"                => "UTC+05:00 (Maldives, Indian)",
  "Antarctica/Mawson"              => "UTC+05:00 (Mawson, Antarctica)",
  "Asia/Yekaterinburg"             => "UTC+05:00 (Yekaterinburg, Asia)",
  "Asia/Aqtau"                     => "UTC+05:00 (Aqtau, Asia)",
  "Asia/Colombo"                   => "UTC+05:30 (Colombo, Asia)",
  "Asia/Kolkata"                   => "UTC+05:30 (Kolkata, Asia)",
  "Asia/Kathmandu"                 => "UTC+05:45 (Kathmandu, Asia)",
  "Asia/Urumqi"                    => "UTC+06:00 (Urumqi, Asia)",
  "Asia/Bishkek"                   => "UTC+06:00 (Bishkek, Asia)",
  "Asia/Thimphu"                   => "UTC+06:00 (Thimphu, Asia)",
  "Asia/Dhaka"                     => "UTC+06:00 (Dhaka, Asia)",
  "Asia/Novosibirsk"               => "UTC+06:00 (Novosibirsk, Asia)",
  "Indian/Chagos"                  => "UTC+06:00 (Chagos, Indian)",
  "Asia/Qyzylorda"                 => "UTC+06:00 (Qyzylorda, Asia)",
  "Antarctica/Vostok"              => "UTC+06:00 (Vostok, Antarctica)",
  "Asia/Almaty"                    => "UTC+06:00 (Almaty, Asia)",
  "Asia/Omsk"                      => "UTC+06:00 (Omsk, Asia)",
  "Indian/Cocos"                   => "UTC+06:30 (Cocos, Indian)",
  "Asia/Rangoon"                   => "UTC+06:30 (Rangoon, Asia)",
  "Asia/Ho_Chi_Minh"               => "UTC+07:00 (Ho Chi Minh, Asia)",
  "Asia/Vientiane"                 => "UTC+07:00 (Vientiane, Asia)",
  "Antarctica/Davis"               => "UTC+07:00 (Davis, Antarctica)",
  "Asia/Bangkok"                   => "UTC+07:00 (Bangkok, Asia)",
  "Indian/Christmas"               => "UTC+07:00 (Christmas, Indian)",
  "Asia/Hovd"                      => "UTC+07:00 (Hovd, Asia)",
  "Asia/Krasnoyarsk"               => "UTC+07:00 (Krasnoyarsk, Asia)",
  "Asia/Novokuznetsk"              => "UTC+07:00 (Novokuznetsk, Asia)",
  "Asia/Phnom_Penh"                => "UTC+07:00 (Phnom Penh, Asia)",
  "Asia/Pontianak"                 => "UTC+07:00 (Pontianak, Asia)",
  "Asia/Jakarta"                   => "UTC+07:00 (Jakarta, Asia)",
  "Asia/Ulaanbaatar"               => "UTC+08:00 (Ulaanbaatar, Asia)",
  "Asia/Makassar"                  => "UTC+08:00 (Makassar, Asia)",
  "Asia/Manila"                    => "UTC+08:00 (Manila, Asia)",
  "Asia/Shanghai"                  => "UTC+08:00 (Shanghai, Asia)",
  "Antarctica/Casey"               => "UTC+08:00 (Casey, Antarctica)",
  "Asia/Macau"                     => "UTC+08:00 (Macau, Asia)",
  "Asia/Brunei"                    => "UTC+08:00 (Brunei, Asia)",
  "Asia/Taipei"                    => "UTC+08:00 (Taipei, Asia)",
  "Asia/Singapore"                 => "UTC+08:00 (Singapore, Asia)",
  "Asia/Hong_Kong"                 => "UTC+08:00 (Hong Kong, Asia)",
  "Australia/Perth"                => "UTC+08:00 (Perth, Australia)",
  "Asia/Kuala_Lumpur"              => "UTC+08:00 (Kuala Lumpur, Asia)",
  "Asia/Chita"                     => "UTC+08:00 (Chita, Asia)",
  "Asia/Kuching"                   => "UTC+08:00 (Kuching, Asia)",
  "Asia/Choibalsan"                => "UTC+08:00 (Choibalsan, Asia)",
  "Asia/Irkutsk"                   => "UTC+08:00 (Irkutsk, Asia)",
  "Australia/Eucla"                => "UTC+08:45 (Eucla, Australia)",
  "Asia/Tokyo"                     => "UTC+09:00 (Tokyo, Asia)",
  "Asia/Dili"                      => "UTC+09:00 (Dili, Asia)",
  "Pacific/Palau"                  => "UTC+09:00 (Palau, Pacific)",
  "Asia/Jayapura"                  => "UTC+09:00 (Jayapura, Asia)",
  "Asia/Khandyga"                  => "UTC+09:00 (Khandyga, Asia)",
  "Asia/Seoul"                     => "UTC+09:00 (Seoul, Asia)",
  "Asia/Pyongyang"                 => "UTC+09:00 (Pyongyang, Asia)",
  "Asia/Yakutsk"                   => "UTC+09:00 (Yakutsk, Asia)",
  "Australia/Darwin"               => "UTC+09:30 (Darwin, Australia)",
  "Asia/Vladivostok"               => "UTC+10:00 (Vladivostok, Asia)",
  "Pacific/Guam"                   => "UTC+10:00 (Guam, Pacific)",
  "Australia/Brisbane"             => "UTC+10:00 (Brisbane, Australia)",
  "Asia/Sakhalin"                  => "UTC+10:00 (Sakhalin, Asia)",
  "Asia/Magadan"                   => "UTC+10:00 (Magadan, Asia)",
  "Antarctica/DumontDUrville"      => "UTC+10:00 (DumontDUrville, Antarctica)",
  "Pacific/Saipan"                 => "UTC+10:00 (Saipan, Pacific)",
  "Pacific/Port_Moresby"           => "UTC+10:00 (Port Moresby, Pacific)",
  "Pacific/Chuuk"                  => "UTC+10:00 (Chuuk, Pacific)",
  "Asia/Ust-Nera"                  => "UTC+10:00 (Ust-Nera, Asia)",
  "Australia/Lindeman"             => "UTC+10:00 (Lindeman, Australia)",
  "Australia/Adelaide"             => "UTC+10:30 (Adelaide, Australia)",
  "Australia/Broken_Hill"          => "UTC+10:30 (Broken Hill, Australia)",
  "Australia/Hobart"               => "UTC+11:00 (Hobart, Australia)",
  "Australia/Currie"               => "UTC+11:00 (Currie, Australia)",
  "Pacific/Kosrae"                 => "UTC+11:00 (Kosrae, Pacific)",
  "Pacific/Noumea"                 => "UTC+11:00 (Noumea, Pacific)",
  "Pacific/Pohnpei"                => "UTC+11:00 (Pohnpei, Pacific)",
  "Australia/Melbourne"            => "UTC+11:00 (Melbourne, Australia)",
  "Australia/Lord_Howe"            => "UTC+11:00 (Lord Howe, Australia)",
  "Antarctica/Macquarie"           => "UTC+11:00 (Macquarie, Antarctica)",
  "Australia/Sydney"               => "UTC+11:00 (Sydney, Australia)",
  "Asia/Srednekolymsk"             => "UTC+11:00 (Srednekolymsk, Asia)",
  "Pacific/Bougainville"           => "UTC+11:00 (Bougainville, Pacific)",
  "Pacific/Guadalcanal"            => "UTC+11:00 (Guadalcanal, Pacific)",
  "Pacific/Efate"                  => "UTC+11:00 (Efate, Pacific)",
  "Pacific/Norfolk"                => "UTC+11:30 (Norfolk, Pacific)",
  "Pacific/Wallis"                 => "UTC+12:00 (Wallis, Pacific)",
  "Pacific/Wake"                   => "UTC+12:00 (Wake, Pacific)",
  "Pacific/Funafuti"               => "UTC+12:00 (Funafuti, Pacific)",
  "Asia/Anadyr"                    => "UTC+12:00 (Anadyr, Asia)",
  "Pacific/Fiji"                   => "UTC+12:00 (Fiji, Pacific)",
  "Pacific/Tarawa"                 => "UTC+12:00 (Tarawa, Pacific)",
  "Asia/Kamchatka"                 => "UTC+12:00 (Kamchatka, Asia)",
  "Pacific/Nauru"                  => "UTC+12:00 (Nauru, Pacific)",
  "Pacific/Kwajalein"              => "UTC+12:00 (Kwajalein, Pacific)",
  "Pacific/Majuro"                 => "UTC+12:00 (Majuro, Pacific)",
  "Pacific/Tongatapu"              => "UTC+13:00 (Tongatapu, Pacific)",
  "Pacific/Enderbury"              => "UTC+13:00 (Enderbury, Pacific)",
  "Antarctica/McMurdo"             => "UTC+13:00 (McMurdo, Antarctica)",
  "Pacific/Auckland"               => "UTC+13:00 (Auckland, Pacific)",
  "Pacific/Fakaofo"                => "UTC+13:00 (Fakaofo, Pacific)",
  "Pacific/Chatham"                => "UTC+13:45 (Chatham, Pacific)",
  "Pacific/Apia"                   => "UTC+14:00 (Apia, Pacific)",
  "Pacific/Kiritimati"             => "UTC+14:00 (Kiritimati, Pacific)"
];
<?php

class TimeZones {

  /**
   * @return array
   */
  public function generate()
  {
    $identifiers = DateTimeZone::listIdentifiers();
    $utc = new \DateTime(null, new DateTimeZone('UTC'));

    $offsets = [];

    foreach ($identifiers as $identifier)
    {
      if ($identifier === 'UTC') continue;
      $offsets[$identifier] = (new DateTimeZone($identifier))->getOffset($utc);
    }

    asort($offsets);

    $fields = [];

    foreach ($offsets as $identifier => $offset)
    {
      $fields[$identifier] = $this->humanReadableOffset($offset) . ' (' . $this->humanReadableName($identifier) . ')';
    }

    return $fields;
  }

  /**
   * @param int $offset
   * @return string
   */
  private function humanReadableOffset($offset)
  {
    if ($offset === 0)
    {
      return 'UTC';
    }
    else
    {
      $sign = $offset > 0 ? '+' : '-';

      $formattedOffset = gmdate('H:i', abs($offset));

      return 'UTC' . $sign . $formattedOffset;
    }
  }

  /**
   * @param string $identifier
   * @return string
   */
  private function humanReadableName($identifier)
  {
    return implode(', ', array_reverse(explode('/', str_replace('_', ' ', $identifier))));
  }

}