Generating a drop down list of timezones with PHP

Viewed 133800

Most sites need some way to show the dates on the site in the users preferred timezone. Below are two lists that I found and then one method using the built in PHP DateTime class in PHP 5.

I need help knowing which of these would be the best to attempt to use when trying to get the UTC offset from the user on register.

One:

<option value="-12">[UTC - 12] Baker Island Time</option>
<option value="-11">[UTC - 11] Niue Time, Samoa Standard Time</option>
<option value="-10">[UTC - 10] Hawaii-Aleutian Standard Time, Cook Island Time</option>
<option value="-9.5">[UTC - 9:30] Marquesas Islands Time</option>
<option value="-9">[UTC - 9] Alaska Standard Time, Gambier Island Time</option>
<option value="-8">[UTC - 8] Pacific Standard Time</option>
<option value="-7">[UTC - 7] Mountain Standard Time</option>
<option value="-6">[UTC - 6] Central Standard Time</option>
<option value="-5">[UTC - 5] Eastern Standard Time</option>
<option value="-4.5">[UTC - 4:30] Venezuelan Standard Time</option>
<option value="-4">[UTC - 4] Atlantic Standard Time</option>
<option value="-3.5">[UTC - 3:30] Newfoundland Standard Time</option>
<option value="-3">[UTC - 3] Amazon Standard Time, Central Greenland Time</option>
<option value="-2">[UTC - 2] Fernando de Noronha Time, South Georgia &amp; the South Sandwich Islands Time</option>
<option value="-1">[UTC - 1] Azores Standard Time, Cape Verde Time, Eastern Greenland Time</option>
<option value="0" selected="selected">[UTC] Western European Time, Greenwich Mean Time</option>
<option value="1">[UTC + 1] Central European Time, West African Time</option>
<option value="2">[UTC + 2] Eastern European Time, Central African Time</option>
<option value="3">[UTC + 3] Moscow Standard Time, Eastern African Time</option>
<option value="3.5">[UTC + 3:30] Iran Standard Time</option>
<option value="4">[UTC + 4] Gulf Standard Time, Samara Standard Time</option>
<option value="4.5">[UTC + 4:30] Afghanistan Time</option>
<option value="5">[UTC + 5] Pakistan Standard Time, Yekaterinburg Standard Time</option>
<option value="5.5">[UTC + 5:30] Indian Standard Time, Sri Lanka Time</option>
<option value="5.75">[UTC + 5:45] Nepal Time</option>
<option value="6">[UTC + 6] Bangladesh Time, Bhutan Time, Novosibirsk Standard Time</option>
<option value="6.5">[UTC + 6:30] Cocos Islands Time, Myanmar Time</option>
<option value="7">[UTC + 7] Indochina Time, Krasnoyarsk Standard Time</option>
<option value="8">[UTC + 8] Chinese Standard Time, Australian Western Standard Time, Irkutsk Standard Time</option>
<option value="8.75">[UTC + 8:45] Southeastern Western Australia Standard Time</option>
<option value="9">[UTC + 9] Japan Standard Time, Korea Standard Time, Chita Standard Time</option>
<option value="9.5">[UTC + 9:30] Australian Central Standard Time</option>
<option value="10">[UTC + 10] Australian Eastern Standard Time, Vladivostok Standard Time</option>
<option value="10.5">[UTC + 10:30] Lord Howe Standard Time</option>
<option value="11">[UTC + 11] Solomon Island Time, Magadan Standard Time</option>
<option value="11.5">[UTC + 11:30] Norfolk Island Time</option>
<option value="12">[UTC + 12] New Zealand Time, Fiji Time, Kamchatka Standard Time</option>
<option value="12.75">[UTC + 12:45] Chatham Islands Time</option>
<option value="13">[UTC + 13] Tonga Time, Phoenix Islands Time</option>
<option value="14">[UTC + 14] Line Island Time</option>

Or using PHP friendly values:

<option value="Pacific/Midway">(GMT-11:00) Midway Island, Samoa</option>
<option value="America/Adak">(GMT-10:00) Hawaii-Aleutian</option>
<option value="Etc/GMT+10">(GMT-10:00) Hawaii</option>
<option value="Pacific/Marquesas">(GMT-09:30) Marquesas Islands</option>
<option value="Pacific/Gambier">(GMT-09:00) Gambier Islands</option>
<option value="America/Anchorage">(GMT-09:00) Alaska</option>
<option value="America/Ensenada">(GMT-08:00) Tijuana, Baja California</option>
<option value="Etc/GMT+8">(GMT-08:00) Pitcairn Islands</option>
<option value="America/Los_Angeles">(GMT-08:00) Pacific Time (US & Canada)</option>
<option value="America/Denver">(GMT-07:00) Mountain Time (US & Canada)</option>
<option value="America/Chihuahua">(GMT-07:00) Chihuahua, La Paz, Mazatlan</option>
<option value="America/Dawson_Creek">(GMT-07:00) Arizona</option>
<option value="America/Belize">(GMT-06:00) Saskatchewan, Central America</option>
<option value="America/Cancun">(GMT-06:00) Guadalajara, Mexico City, Monterrey</option>
<option value="Chile/EasterIsland">(GMT-06:00) Easter Island</option>
<option value="America/Chicago">(GMT-06:00) Central Time (US & Canada)</option>
<option value="America/New_York">(GMT-05:00) Eastern Time (US & Canada)</option>
<option value="America/Havana">(GMT-05:00) Cuba</option>
<option value="America/Bogota">(GMT-05:00) Bogota, Lima, Quito, Rio Branco</option>
<option value="America/Caracas">(GMT-04:30) Caracas</option>
<option value="America/Santiago">(GMT-04:00) Santiago</option>
<option value="America/La_Paz">(GMT-04:00) La Paz</option>
<option value="Atlantic/Stanley">(GMT-04:00) Faukland Islands</option>
<option value="America/Campo_Grande">(GMT-04:00) Brazil</option>
<option value="America/Goose_Bay">(GMT-04:00) Atlantic Time (Goose Bay)</option>
<option value="America/Glace_Bay">(GMT-04:00) Atlantic Time (Canada)</option>
<option value="America/St_Johns">(GMT-03:30) Newfoundland</option>
<option value="America/Araguaina">(GMT-03:00) UTC-3</option>
<option value="America/Montevideo">(GMT-03:00) Montevideo</option>
<option value="America/Miquelon">(GMT-03:00) Miquelon, St. Pierre</option>
<option value="America/Godthab">(GMT-03:00) Greenland</option>
<option value="America/Argentina/Buenos_Aires">(GMT-03:00) Buenos Aires</option>
<option value="America/Sao_Paulo">(GMT-03:00) Brasilia</option>
<option value="America/Noronha">(GMT-02:00) Mid-Atlantic</option>
<option value="Atlantic/Cape_Verde">(GMT-01:00) Cape Verde Is.</option>
<option value="Atlantic/Azores">(GMT-01:00) Azores</option>
<option value="Europe/Belfast">(GMT) Greenwich Mean Time : Belfast</option>
<option value="Europe/Dublin">(GMT) Greenwich Mean Time : Dublin</option>
<option value="Europe/Lisbon">(GMT) Greenwich Mean Time : Lisbon</option>
<option value="Europe/London">(GMT) Greenwich Mean Time : London</option>
<option value="Africa/Abidjan">(GMT) Monrovia, Reykjavik</option>
<option value="Europe/Amsterdam">(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna</option>
<option value="Europe/Belgrade">(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague</option>
<option value="Europe/Brussels">(GMT+01:00) Brussels, Copenhagen, Madrid, Paris</option>
<option value="Africa/Algiers">(GMT+01:00) West Central Africa</option>
<option value="Africa/Windhoek">(GMT+01:00) Windhoek</option>
<option value="Asia/Beirut">(GMT+02:00) Beirut</option>
<option value="Africa/Cairo">(GMT+02:00) Cairo</option>
<option value="Asia/Gaza">(GMT+02:00) Gaza</option>
<option value="Africa/Blantyre">(GMT+02:00) Harare, Pretoria</option>
<option value="Asia/Jerusalem">(GMT+02:00) Jerusalem</option>
<option value="Europe/Minsk">(GMT+02:00) Minsk</option>
<option value="Asia/Damascus">(GMT+02:00) Syria</option>
<option value="Europe/Moscow">(GMT+03:00) Moscow, St. Petersburg, Volgograd</option>
<option value="Africa/Addis_Ababa">(GMT+03:00) Nairobi</option>
<option value="Asia/Tehran">(GMT+03:30) Tehran</option>
<option value="Asia/Dubai">(GMT+04:00) Abu Dhabi, Muscat</option>
<option value="Asia/Yerevan">(GMT+04:00) Yerevan</option>
<option value="Asia/Kabul">(GMT+04:30) Kabul</option>
<option value="Asia/Yekaterinburg">(GMT+05:00) Ekaterinburg</option>
<option value="Asia/Tashkent">(GMT+05:00) Tashkent</option>
<option value="Asia/Kolkata">(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi</option>
<option value="Asia/Katmandu">(GMT+05:45) Kathmandu</option>
<option value="Asia/Dhaka">(GMT+06:00) Astana, Dhaka</option>
<option value="Asia/Novosibirsk">(GMT+06:00) Novosibirsk</option>
<option value="Asia/Rangoon">(GMT+06:30) Yangon (Rangoon)</option>
<option value="Asia/Bangkok">(GMT+07:00) Bangkok, Hanoi, Jakarta</option>
<option value="Asia/Krasnoyarsk">(GMT+07:00) Krasnoyarsk</option>
<option value="Asia/Hong_Kong">(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi</option>
<option value="Asia/Irkutsk">(GMT+08:00) Irkutsk, Ulaan Bataar</option>
<option value="Australia/Perth">(GMT+08:00) Perth</option>
<option value="Australia/Eucla">(GMT+08:45) Eucla</option>
<option value="Asia/Tokyo">(GMT+09:00) Osaka, Sapporo, Tokyo</option>
<option value="Asia/Seoul">(GMT+09:00) Seoul</option>
<option value="Asia/Yakutsk">(GMT+09:00) Yakutsk</option>
<option value="Australia/Adelaide">(GMT+09:30) Adelaide</option>
<option value="Australia/Darwin">(GMT+09:30) Darwin</option>
<option value="Australia/Brisbane">(GMT+10:00) Brisbane</option>
<option value="Australia/Hobart">(GMT+10:00) Hobart</option>
<option value="Asia/Vladivostok">(GMT+10:00) Vladivostok</option>
<option value="Australia/Lord_Howe">(GMT+10:30) Lord Howe Island</option>
<option value="Etc/GMT-11">(GMT+11:00) Solomon Is., New Caledonia</option>
<option value="Asia/Magadan">(GMT+11:00) Magadan</option>
<option value="Pacific/Norfolk">(GMT+11:30) Norfolk Island</option>
<option value="Asia/Anadyr">(GMT+12:00) Anadyr, Kamchatka</option>
<option value="Pacific/Auckland">(GMT+12:00) Auckland, Wellington</option>
<option value="Etc/GMT-12">(GMT+12:00) Fiji, Kamchatka, Marshall Is.</option>
<option value="Pacific/Chatham">(GMT+12:45) Chatham Islands</option>
<option value="Pacific/Tongatapu">(GMT+13:00) Nuku'alofa</option>
<option value="Pacific/Kiritimati">(GMT+14:00) Kiritimati</option>

Or just using PHP itself:

$timezones = DateTimeZone::listAbbreviations();

$cities = array();
foreach( $timezones as $key => $zones )
{
    foreach( $zones as $id => $zone )
    {
        /**
         * Only get timezones explicitely not part of "Others".
         * @see http://www.php.net/manual/en/timezones.others.php
         */
        if ( preg_match( '/^(America|Antartica|Arctic|Asia|Atlantic|Europe|Indian|Pacific)\//', $zone['timezone_id'] ) 
            && $zone['timezone_id']) {
            $cities[$zone['timezone_id']][] = $key;
        }
    }
}

// For each city, have a comma separated list of all possible timezones for that city.
foreach( $cities as $key => $value )
    $cities[$key] = join( ', ', $value);

// Only keep one city (the first and also most important) for each set of possibilities. 
$cities = array_unique( $cities );

// Sort by area/city name.
ksort( $cities );

It seems like the last one would be the safest as it would grow with the PHP release being used. You could also flip that array around when needed to tie timezones to city names.

27 Answers

This riffs on the answer given by @Jonathan (fresh for 2021) and includes the javascript/jquery to auto select the time zone. The reason I like this is because a) it auto selects the users timezone, and b) if they want to change it they get a human readable alphabetically sorted list that makes it easy to scan for their country, and then city.

TBH, In most cases the user will not need to change it because it will correctly auto select with javasdcript.

PHP to build the picker data:

function timezonePickerData() {
    static $timezones = null;
    if ($timezones === null) {
        $timezones = [];
        $offsets = [];
        $now = new \DateTime('now', new \DateTimeZone('UTC'));
        foreach (\DateTimeZone::listIdentifiers(\DateTimeZone::ALL) as $timezone) {

            // Calculate offset
            $now->setTimezone(new \DateTimeZone($timezone));
            $offsets[] = $offset = $now->getOffset();

            // Display text for UTC offset
            $hours = intval($offset / 3600);
            $minutes = abs(intval($offset % 3600 / 60));
            $utcDiff = 'UTC' . ($offset ? sprintf('%+03d:%02d', $hours, $minutes) : '');

            // Display text for name
            $name = str_replace('/', ', ',$timezone);
            $name = str_replace('_', ' ', $name);
            $name = str_replace('St ', 'St. ', $name);

            $timezones[$timezone] = "$name ($utcDiff)";
        }
    }

    return $timezones;
}

HTML/PHP to build the picker:

<select id="timezone">
<?php
    foreach(timezonePickerData() as $timezone => $location) {
        print "<option value=\"$timezone\">$location</option>\n";
    }
?>
</select>

jQuery to auto select the users timezone:

var data = Intl.DateTimeFormat().resolvedOptions()
$("#timezone").val(data.timeZone);

This is what the auto selected picker format looks like (un-clicked):

America, Los Angeles (UTC-7:00)

This is what the pick list looks like when the user clicks to change their timezone (easy for user to scan):

enter image description here

$timezone = array(
    'Pacific/Midway' => '(GMT-11:00) Midway Island, Samoa',
    'America/Adak' => '(GMT-10:00) Hawaii-Aleutian',
    'Etc/GMT+10' => '(GMT-10:00) Hawaii',
    'Pacific/Marquesas' => '(GMT-09:30) Marquesas Islands',
    'Pacific/Gambier' => '(GMT-09:00) Gambier Islands',
    'America/Anchorage' => '(GMT-09:00) Alaska',
    'America/Ensenada' => '(GMT-08:00) Tijuana, Baja California',
    'Etc/GMT+8' => '(GMT-08:00) Pitcairn Islands',
    'America/Los_Angeles' => '(GMT-08:00) Pacific Time (US & Canada)',
    'America/Denver' => '(GMT-07:00) Mountain Time (US & Canada)',
    'America/Chihuahua' => '(GMT-07:00) Chihuahua, La Paz, Mazatlan',
    'America/Dawson_Creek' => '(GMT-07:00) Arizona',
    'America/Belize' => '(GMT-06:00) Saskatchewan, Central America',
    'America/Cancun' => '(GMT-06:00) Guadalajara, Mexico City, Monterrey',
    'Chile/EasterIsland' => '(GMT-06:00) Easter Island',
    'America/Chicago' => '(GMT-06:00) Central Time (US & Canada)',
    'America/New_York' => '(GMT-05:00) Eastern Time (US & Canada)',
    'America/Havana' => '(GMT-05:00) Cuba',
    'America/Bogota' => '(GMT-05:00) Bogota, Lima, Quito, Rio Branco',
    'America/Caracas' => '(GMT-04:30) Caracas',
    'America/Santiago' => '(GMT-04:00) Santiago',
    'America/La_Paz' => '(GMT-04:00) La Paz',
    'Atlantic/Stanley' => '(GMT-04:00) Faukland Islands',
    'America/Campo_Grande' => '(GMT-04:00) Brazil',
    'America/Goose_Bay' => '(GMT-04:00) Atlantic Time (Goose Bay)',
    'America/Glace_Bay' => '(GMT-04:00) Atlantic Time (Canada)',
    'America/St_Johns' => '(GMT-03:30) Newfoundland',
    'America/Araguaina' => '(GMT-03:00) UTC-3',
    'America/Montevideo' => '(GMT-03:00) Montevideo',
    'America/Miquelon' => '(GMT-03:00) Miquelon, St. Pierre',
    'America/Godthab' => '(GMT-03:00) Greenland',
    'America/Argentina/Buenos_Aires' => '(GMT-03:00) Buenos Aires',
    'America/Sao_Paulo' => '(GMT-03:00) Brasilia',
    'America/Noronha' => '(GMT-02:00) Mid-Atlantic',
    'Atlantic/Cape_Verde' => '(GMT-01:00) Cape Verde Is.',
    'Atlantic/Azores' => '(GMT-01:00) Azores',
    'Europe/Belfast' => '(GMT) Greenwich Mean Time : Belfast',
    'Europe/Dublin' => '(GMT) Greenwich Mean Time : Dublin',
    'Europe/Lisbon' => '(GMT) Greenwich Mean Time : Lisbon',
    'Europe/London' => '(GMT) Greenwich Mean Time : London',
    'Africa/Abidjan' => '(GMT) Monrovia, Reykjavik',
    'Europe/Amsterdam' => '(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna',
    'Europe/Belgrade' => '(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague',
    'Europe/Brussels' => '(GMT+01:00) Brussels, Copenhagen, Madrid, Paris',
    'Africa/Algiers' => '(GMT+01:00) West Central Africa',
    'Africa/Windhoek' => '(GMT+01:00) Windhoek',
    'Asia/Beirut' => '(GMT+02:00) Beirut',
    'Africa/Cairo' => '(GMT+02:00) Cairo',
    'Asia/Gaza' => '(GMT+02:00) Gaza',
    'Africa/Blantyre' => '(GMT+02:00) Harare, Pretoria',
    'Asia/Jerusalem' => '(GMT+02:00) Jerusalem',
    'Europe/Minsk' => '(GMT+02:00) Minsk',
    'Asia/Damascus' => '(GMT+02:00) Syria',
    'Europe/Moscow' => '(GMT+03:00) Moscow, St. Petersburg, Volgograd',
    'Africa/Addis_Ababa' => '(GMT+03:00) Nairobi',
    'Asia/Tehran' => '(GMT+03:30) Tehran',
    'Asia/Dubai' => '(GMT+04:00) Abu Dhabi, Muscat',
    'Asia/Yerevan' => '(GMT+04:00) Yerevan',
    'Asia/Kabul' => '(GMT+04:30) Kabul',
    'Asia/Yekaterinburg' => '(GMT+05:00) Ekaterinburg',
    'Asia/Tashkent' => '(GMT+05:00) Tashkent',
    'Asia/Kolkata' => '(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi',
    'Asia/Katmandu' => '(GMT+05:45) Kathmandu',
    'Asia/Dhaka' => '(GMT+06:00) Astana, Dhaka',
    'Asia/Novosibirsk' => '(GMT+06:00) Novosibirsk',
    'Asia/Rangoon' => '(GMT+06:30) Yangon (Rangoon)',
    'Asia/Bangkok' => '(GMT+07:00) Bangkok, Hanoi, Jakarta',
    'Asia/Krasnoyarsk' => '(GMT+07:00) Krasnoyarsk',
    'Asia/Hong_Kong' => '(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi',
    'Asia/Irkutsk' => '(GMT+08:00) Irkutsk, Ulaan Bataar',
    'Australia/Perth' => '(GMT+08:00) Perth',
    'Australia/Eucla' => '(GMT+08:45) Eucla',
    'Asia/Tokyo' => '(GMT+09:00) Osaka, Sapporo, Tokyo',
    'Asia/Seoul' => '(GMT+09:00) Seoul',
    'Asia/Yakutsk' => '(GMT+09:00) Yakutsk',
    'Australia/Adelaide' => '(GMT+09:30) Adelaide',
    'Australia/Darwin' => '(GMT+09:30) Darwin',
    'Australia/Brisbane' => '(GMT+10:00) Brisbane',
    'Australia/Hobart' => '(GMT+10:00) Hobart',
    'Asia/Vladivostok' => '(GMT+10:00) Vladivostok',
    'Australia/Lord_Howe' => '(GMT+10:30) Lord Howe Island',
    'Etc/GMT-11' => '(GMT+11:00) Solomon Is., New Caledonia',
    'Asia/Magadan' => '(GMT+11:00) Magadan',
    'Pacific/Norfolk' => '(GMT+11:30) Norfolk Island',
    'Asia/Anadyr' => '(GMT+12:00) Anadyr, Kamchatka',
    'Pacific/Auckland' => '(GMT+12:00) Auckland, Wellington',
    'Etc/GMT-12' => '(GMT+12:00) Fiji, Kamchatka, Marshall Is.',
    'Pacific/Chatham' => '(GMT+12:45) Chatham Islands',
    'Pacific/Tongatapu' => '(GMT+13:00) Nukualofa',
    'Pacific/Kiritimati' => '(GMT+14:00) Kiritimati',

date_default_timezone_set($timezone);
public static function tzList()
{
    $tzMap = array();
    $zones = \DateTimeZone::listIdentifiers();
    foreach ($zones as $zone) {
        $tz = new \DateTimeZone($zone);
        $now = new \DateTime("utc", $tz);
        $diffInSeconds = $tz->getOffset($now);
        $hours = floor($diffInSeconds / 3600);
        $minutes = floor(($diffInSeconds % 3600) / 60);
        $tzMap[$zone] = sprintf("%+d", $hours) . ":" . sprintf("%02d", $minutes);
    }
    return $tzMap;
}

Tada! It's this simple. Gives you an array with the key as the PHP timezone and the value as a string in the format +-Hours:Minutes

Variant 1

Result:

...
[America/Scoresbysund] => (UTC+00:00) America/Scoresbysund
[Atlantic/Azores] => (UTC+00:00) Atlantic/Azores
[Atlantic/Reykjavik] => (UTC+00:00) Atlantic/Reykjavik
[Atlantic/St_Helena] => (UTC+00:00) Atlantic/St_Helena
[UTC] => (UTC+00:00) UTC
[Africa/Algiers] => (UTC+01:00) Africa/Algiers
[Africa/Bangui] => (UTC+01:00) Africa/Bangui 
...

Code:

$tzlist = DateTimeZone::listIdentifiers(DateTimeZone::ALL);

$result = [];
foreach ($tzlist as $timezone) {
    $offset = (new DateTimeZone($timezone))->getOffset(new DateTime);
    $offsetPrefix = $offset < 0 ? '-' : '+';
    $offsetFormatted = gmdate('H:i', abs($offset));
    $utcOffset = "(UTC$offsetPrefix$offsetFormatted)";

    $result[$timezone] = "${$utcOffset} $timezone";
}
asort($result);
print_r($result);

Variant 2

Result:

Array
(
    [0] => Array
        (
            [value] => Africa/Abidjan
            [offset] => +00:00
            [text] => (UTC+00:00) Africa/Abidjan
        )

    [1] => Array
        (
            [value] => Africa/Conakry
            [offset] => +00:00
            [text] => (UTC+00:00) Africa/Conakry
        )
...

Code:

$tzlist = DateTimeZone::listIdentifiers(DateTimeZone::ALL);

$result = [];
foreach ($tzlist as $timezone) {
    $offset = (new DateTimeZone($timezone))->getOffset(new DateTime);
    $offsetPrefix = $offset < 0 ? '-' : '+';
    $offsetFormatted = gmdate('H:i', abs($offset));
    $utcOffset = "UTC$offsetPrefix$offsetFormatted";

    $result[] = [
        'value' => $timezone,
        'offset' => "$offsetPrefix$offsetFormatted"
        // "text" => "($utcOffset) $timezone"
    ];
}
usort($result, function ($a, $b) { return strcmp($a["offset"], $b["offset"]); });
print_r($result);

If you don't want to be dependent on static timezone list, or want to display the offset along with timezone.

Here is what I came up with

function timezones()
{
    $timezones = \DateTimeZone::listIdentifiers();
    $items = array();
    foreach($timezones as $timezoneId) {
        $timezone = new \DateTimeZone($timezoneId);
        $offsetInSeconds = $timezone->getOffset(new \DateTime());
        $items[$timezoneId] = $offsetInSeconds;
    }
    asort($items);
    array_walk ($items, function (&$offsetInSeconds, &$timezoneId) { 
        $offsetPrefix = $offsetInSeconds < 0 ? '-' : '+';
        $offset = gmdate('H:i', abs($offsetInSeconds));
        $offset = "(GMT${offsetPrefix}${offset}) ".$timezoneId;
        $offsetInSeconds = $offset;
    });
    return $items;
}

Which gives me the following result

Array
(
    [Pacific/Midway] => (GMT-11:00) Pacific/Midway
    [Pacific/Pago_Pago] => (GMT-11:00) Pacific/Pago_Pago
    [Pacific/Niue] => (GMT-11:00) Pacific/Niue
    [America/Adak] => (GMT-10:00) America/Adak
    [Pacific/Tahiti] => (GMT-10:00) Pacific/Tahiti
    [Pacific/Rarotonga] => (GMT-10:00) Pacific/Rarotonga
    [Pacific/Honolulu] => (GMT-10:00) Pacific/Honolulu
    [Pacific/Marquesas] => (GMT-09:30) Pacific/Marquesas
    [America/Sitka] => (GMT-09:00) America/Sitka
    [Pacific/Gambier] => (GMT-09:00) Pacific/Gambier
    [America/Yakutat] => (GMT-09:00) America/Yakutat
    [America/Juneau] => (GMT-09:00) America/Juneau
    [America/Nome] => (GMT-09:00) America/Nome
    [America/Anchorage] => (GMT-09:00) America/Anchorage
    [America/Metlakatla] => (GMT-09:00) America/Metlakatla
    [America/Los_Angeles] => (GMT-08:00) America/Los_Angeles
    [America/Tijuana] => (GMT-08:00) America/Tijuana
    [America/Whitehorse] => (GMT-08:00) America/Whitehorse
    [America/Vancouver] => (GMT-08:00) America/Vancouver
    [America/Dawson] => (GMT-08:00) America/Dawson
    [Pacific/Pitcairn] => (GMT-08:00) Pacific/Pitcairn
    [America/Mazatlan] => (GMT-07:00) America/Mazatlan
    [America/Fort_Nelson] => (GMT-07:00) America/Fort_Nelson
    [America/Yellowknife] => (GMT-07:00) America/Yellowknife
    [America/Inuvik] => (GMT-07:00) America/Inuvik
    [America/Edmonton] => (GMT-07:00) America/Edmonton
    [America/Denver] => (GMT-07:00) America/Denver
    [America/Chihuahua] => (GMT-07:00) America/Chihuahua
    [America/Boise] => (GMT-07:00) America/Boise
    [America/Ojinaga] => (GMT-07:00) America/Ojinaga
    [America/Cambridge_Bay] => (GMT-07:00) America/Cambridge_Bay
    [America/Dawson_Creek] => (GMT-07:00) America/Dawson_Creek
    [America/Phoenix] => (GMT-07:00) America/Phoenix
    [America/Hermosillo] => (GMT-07:00) America/Hermosillo
    [America/Creston] => (GMT-07:00) America/Creston
    [America/Matamoros] => (GMT-06:00) America/Matamoros
    [America/Menominee] => (GMT-06:00) America/Menominee
    [America/Indiana/Knox] => (GMT-06:00) America/Indiana/Knox
    [America/Managua] => (GMT-06:00) America/Managua
    [America/Bahia_Banderas] => (GMT-06:00) America/Bahia_Banderas
    [America/Indiana/Tell_City] => (GMT-06:00) America/Indiana/Tell_City
    [America/Belize] => (GMT-06:00) America/Belize
    [America/Chicago] => (GMT-06:00) America/Chicago
    [America/Guatemala] => (GMT-06:00) America/Guatemala
    [America/El_Salvador] => (GMT-06:00) America/El_Salvador
    [America/Merida] => (GMT-06:00) America/Merida
    [America/Costa_Rica] => (GMT-06:00) America/Costa_Rica
    [America/Mexico_City] => (GMT-06:00) America/Mexico_City
    [America/Winnipeg] => (GMT-06:00) America/Winnipeg
    [Pacific/Galapagos] => (GMT-06:00) Pacific/Galapagos
    [America/Resolute] => (GMT-06:00) America/Resolute
    [America/Regina] => (GMT-06:00) America/Regina
    [America/Rankin_Inlet] => (GMT-06:00) America/Rankin_Inlet
    [America/Rainy_River] => (GMT-06:00) America/Rainy_River
    [America/North_Dakota/New_Salem] => (GMT-06:00) America/North_Dakota/New_Salem
    [America/North_Dakota/Beulah] => (GMT-06:00) America/North_Dakota/Beulah
    [America/North_Dakota/Center] => (GMT-06:00) America/North_Dakota/Center
    [America/Tegucigalpa] => (GMT-06:00) America/Tegucigalpa
    [America/Swift_Current] => (GMT-06:00) America/Swift_Current
    [America/Monterrey] => (GMT-06:00) America/Monterrey
    [America/Pangnirtung] => (GMT-05:00) America/Pangnirtung
    [America/Indiana/Petersburg] => (GMT-05:00) America/Indiana/Petersburg
    [America/Indiana/Marengo] => (GMT-05:00) America/Indiana/Marengo
    [America/Bogota] => (GMT-05:00) America/Bogota
    [America/Toronto] => (GMT-05:00) America/Toronto
    [America/Detroit] => (GMT-05:00) America/Detroit
    [America/Panama] => (GMT-05:00) America/Panama
    [America/Cancun] => (GMT-05:00) America/Cancun
    [America/Rio_Branco] => (GMT-05:00) America/Rio_Branco
    [America/Port-au-Prince] => (GMT-05:00) America/Port-au-Prince
    [America/Cayman] => (GMT-05:00) America/Cayman
    [America/Grand_Turk] => (GMT-05:00) America/Grand_Turk
    [America/Havana] => (GMT-05:00) America/Havana
    [America/Indiana/Indianapolis] => (GMT-05:00) America/Indiana/Indianapolis
    [America/Indiana/Vevay] => (GMT-05:00) America/Indiana/Vevay
    [America/Guayaquil] => (GMT-05:00) America/Guayaquil
    [America/Nipigon] => (GMT-05:00) America/Nipigon
    [America/Indiana/Vincennes] => (GMT-05:00) America/Indiana/Vincennes
    [America/Atikokan] => (GMT-05:00) America/Atikokan
    [America/Indiana/Winamac] => (GMT-05:00) America/Indiana/Winamac
    [America/New_York] => (GMT-05:00) America/New_York
    [America/Iqaluit] => (GMT-05:00) America/Iqaluit
    [America/Jamaica] => (GMT-05:00) America/Jamaica
    [America/Nassau] => (GMT-05:00) America/Nassau
    [America/Kentucky/Louisville] => (GMT-05:00) America/Kentucky/Louisville
    [America/Kentucky/Monticello] => (GMT-05:00) America/Kentucky/Monticello
    [America/Eirunepe] => (GMT-05:00) America/Eirunepe
    [Pacific/Easter] => (GMT-05:00) Pacific/Easter
    [America/Lima] => (GMT-05:00) America/Lima
    [America/Thunder_Bay] => (GMT-05:00) America/Thunder_Bay
    [America/Guadeloupe] => (GMT-04:00) America/Guadeloupe
    [America/Manaus] => (GMT-04:00) America/Manaus
    [America/Guyana] => (GMT-04:00) America/Guyana
    [America/Halifax] => (GMT-04:00) America/Halifax
    [America/Puerto_Rico] => (GMT-04:00) America/Puerto_Rico
    [America/Porto_Velho] => (GMT-04:00) America/Porto_Velho
    [America/Port_of_Spain] => (GMT-04:00) America/Port_of_Spain
    [America/Montserrat] => (GMT-04:00) America/Montserrat
    [America/Moncton] => (GMT-04:00) America/Moncton
    [America/Martinique] => (GMT-04:00) America/Martinique
    [America/Kralendijk] => (GMT-04:00) America/Kralendijk
    [America/La_Paz] => (GMT-04:00) America/La_Paz
    [America/Marigot] => (GMT-04:00) America/Marigot
    [America/Lower_Princes] => (GMT-04:00) America/Lower_Princes
    [America/Grenada] => (GMT-04:00) America/Grenada
    [America/Santo_Domingo] => (GMT-04:00) America/Santo_Domingo
    [America/Goose_Bay] => (GMT-04:00) America/Goose_Bay
    [America/Caracas] => (GMT-04:00) America/Caracas
    [America/Anguilla] => (GMT-04:00) America/Anguilla
    [America/St_Barthelemy] => (GMT-04:00) America/St_Barthelemy
    [America/Barbados] => (GMT-04:00) America/Barbados
    [America/St_Kitts] => (GMT-04:00) America/St_Kitts
    [America/Blanc-Sablon] => (GMT-04:00) America/Blanc-Sablon
    [America/Boa_Vista] => (GMT-04:00) America/Boa_Vista
    [America/St_Lucia] => (GMT-04:00) America/St_Lucia
    [America/St_Thomas] => (GMT-04:00) America/St_Thomas
    [America/Antigua] => (GMT-04:00) America/Antigua
    [America/St_Vincent] => (GMT-04:00) America/St_Vincent
    [America/Thule] => (GMT-04:00) America/Thule
    [America/Curacao] => (GMT-04:00) America/Curacao
    [America/Tortola] => (GMT-04:00) America/Tortola
    [America/Dominica] => (GMT-04:00) America/Dominica
    [Atlantic/Bermuda] => (GMT-04:00) Atlantic/Bermuda
    [America/Glace_Bay] => (GMT-04:00) America/Glace_Bay
    [America/Aruba] => (GMT-04:00) America/Aruba
    [America/St_Johns] => (GMT-03:30) America/St_Johns
    [America/Argentina/Tucuman] => (GMT-03:00) America/Argentina/Tucuman
    [America/Belem] => (GMT-03:00) America/Belem
    [America/Santiago] => (GMT-03:00) America/Santiago
    [America/Santarem] => (GMT-03:00) America/Santarem
    [America/Recife] => (GMT-03:00) America/Recife
    [America/Punta_Arenas] => (GMT-03:00) America/Punta_Arenas
    [Atlantic/Stanley] => (GMT-03:00) Atlantic/Stanley
    [America/Paramaribo] => (GMT-03:00) America/Paramaribo
    [America/Fortaleza] => (GMT-03:00) America/Fortaleza
    [America/Argentina/San_Luis] => (GMT-03:00) America/Argentina/San_Luis
    [Antarctica/Palmer] => (GMT-03:00) Antarctica/Palmer
    [America/Montevideo] => (GMT-03:00) America/Montevideo
    [America/Cuiaba] => (GMT-03:00) America/Cuiaba
    [America/Miquelon] => (GMT-03:00) America/Miquelon
    [America/Cayenne] => (GMT-03:00) America/Cayenne
    [America/Campo_Grande] => (GMT-03:00) America/Campo_Grande
    [Antarctica/Rothera] => (GMT-03:00) Antarctica/Rothera
    [America/Godthab] => (GMT-03:00) America/Godthab
    [America/Bahia] => (GMT-03:00) America/Bahia
    [America/Asuncion] => (GMT-03:00) America/Asuncion
    [America/Argentina/Ushuaia] => (GMT-03:00) America/Argentina/Ushuaia
    [America/Argentina/La_Rioja] => (GMT-03:00) America/Argentina/La_Rioja
    [America/Araguaina] => (GMT-03:00) America/Araguaina
    [America/Argentina/Buenos_Aires] => (GMT-03:00) America/Argentina/Buenos_Aires
    [America/Argentina/Rio_Gallegos] => (GMT-03:00) America/Argentina/Rio_Gallegos
    [America/Argentina/Catamarca] => (GMT-03:00) America/Argentina/Catamarca
    [America/Maceio] => (GMT-03:00) America/Maceio
    [America/Argentina/San_Juan] => (GMT-03:00) America/Argentina/San_Juan
    [America/Argentina/Salta] => (GMT-03:00) America/Argentina/Salta
    [America/Argentina/Mendoza] => (GMT-03:00) America/Argentina/Mendoza
    [America/Argentina/Cordoba] => (GMT-03:00) America/Argentina/Cordoba
    [America/Argentina/Jujuy] => (GMT-03:00) America/Argentina/Jujuy
    [Atlantic/South_Georgia] => (GMT-02:00) Atlantic/South_Georgia
    [America/Noronha] => (GMT-02:00) America/Noronha
    [America/Sao_Paulo] => (GMT-02:00) America/Sao_Paulo
    [Atlantic/Cape_Verde] => (GMT-01:00) Atlantic/Cape_Verde
    [Atlantic/Azores] => (GMT-01:00) Atlantic/Azores
    [America/Scoresbysund] => (GMT-01:00) America/Scoresbysund
    [Europe/Lisbon] => (GMT+00:00) Europe/Lisbon
    [Europe/London] => (GMT+00:00) Europe/London
    [Europe/Jersey] => (GMT+00:00) Europe/Jersey
    [Europe/Isle_of_Man] => (GMT+00:00) Europe/Isle_of_Man
    [Atlantic/Faroe] => (GMT+00:00) Atlantic/Faroe
    [Europe/Guernsey] => (GMT+00:00) Europe/Guernsey
    [Europe/Dublin] => (GMT+00:00) Europe/Dublin
    [Atlantic/St_Helena] => (GMT+00:00) Atlantic/St_Helena
    [Atlantic/Reykjavik] => (GMT+00:00) Atlantic/Reykjavik
    [Atlantic/Madeira] => (GMT+00:00) Atlantic/Madeira
    [Atlantic/Canary] => (GMT+00:00) Atlantic/Canary
    [Africa/Accra] => (GMT+00:00) Africa/Accra
    [Antarctica/Troll] => (GMT+00:00) Antarctica/Troll
    [Africa/Abidjan] => (GMT+00:00) Africa/Abidjan
    [UTC] => (GMT+00:00) UTC
    [America/Danmarkshavn] => (GMT+00:00) America/Danmarkshavn
    [Africa/Monrovia] => (GMT+00:00) Africa/Monrovia
    [Africa/Dakar] => (GMT+00:00) Africa/Dakar
    [Africa/Conakry] => (GMT+00:00) Africa/Conakry
    [Africa/Casablanca] => (GMT+00:00) Africa/Casablanca
    [Africa/Lome] => (GMT+00:00) Africa/Lome
    [Africa/Freetown] => (GMT+00:00) Africa/Freetown
    [Africa/El_Aaiun] => (GMT+00:00) Africa/El_Aaiun
    [Africa/Bissau] => (GMT+00:00) Africa/Bissau
    [Africa/Nouakchott] => (GMT+00:00) Africa/Nouakchott
    [Africa/Banjul] => (GMT+00:00) Africa/Banjul
    [Africa/Ouagadougou] => (GMT+00:00) Africa/Ouagadougou
    [Africa/Bamako] => (GMT+00:00) Africa/Bamako
    [Europe/Gibraltar] => (GMT+01:00) Europe/Gibraltar
    [Africa/Bangui] => (GMT+01:00) Africa/Bangui
    [Europe/Ljubljana] => (GMT+01:00) Europe/Ljubljana
    [Africa/Ceuta] => (GMT+01:00) Africa/Ceuta
    [Africa/Algiers] => (GMT+01:00) Africa/Algiers
    [Europe/Busingen] => (GMT+01:00) Europe/Busingen
    [Europe/Copenhagen] => (GMT+01:00) Europe/Copenhagen
    [Europe/Madrid] => (GMT+01:00) Europe/Madrid
    [Europe/Budapest] => (GMT+01:00) Europe/Budapest
    [Europe/Brussels] => (GMT+01:00) Europe/Brussels
    [Europe/Bratislava] => (GMT+01:00) Europe/Bratislava
    [Europe/Berlin] => (GMT+01:00) Europe/Berlin
    [Europe/Belgrade] => (GMT+01:00) Europe/Belgrade
    [Europe/Andorra] => (GMT+01:00) Europe/Andorra
    [Europe/Amsterdam] => (GMT+01:00) Europe/Amsterdam
    [Europe/Luxembourg] => (GMT+01:00) Europe/Luxembourg
    [Europe/Monaco] => (GMT+01:00) Europe/Monaco
    [Europe/Malta] => (GMT+01:00) Europe/Malta
    [Europe/Tirane] => (GMT+01:00) Europe/Tirane
    [Europe/Zurich] => (GMT+01:00) Europe/Zurich
    [Europe/Zagreb] => (GMT+01:00) Europe/Zagreb
    [Europe/Warsaw] => (GMT+01:00) Europe/Warsaw
    [Europe/Vienna] => (GMT+01:00) Europe/Vienna
    [Europe/Vatican] => (GMT+01:00) Europe/Vatican
    [Europe/Vaduz] => (GMT+01:00) Europe/Vaduz
    [Europe/Stockholm] => (GMT+01:00) Europe/Stockholm
    [Africa/Brazzaville] => (GMT+01:00) Africa/Brazzaville
    [Europe/Skopje] => (GMT+01:00) Europe/Skopje
    [Europe/Sarajevo] => (GMT+01:00) Europe/Sarajevo
    [Europe/San_Marino] => (GMT+01:00) Europe/San_Marino
    [Europe/Rome] => (GMT+01:00) Europe/Rome
    [Europe/Prague] => (GMT+01:00) Europe/Prague
    [Europe/Paris] => (GMT+01:00) Europe/Paris
    [Europe/Oslo] => (GMT+01:00) Europe/Oslo
    [Europe/Podgorica] => (GMT+01:00) Europe/Podgorica
    [Africa/Douala] => (GMT+01:00) Africa/Douala
    [Arctic/Longyearbyen] => (GMT+01:00) Arctic/Longyearbyen
    [Africa/Malabo] => (GMT+01:00) Africa/Malabo
    [Africa/Kinshasa] => (GMT+01:00) Africa/Kinshasa
    [Africa/Libreville] => (GMT+01:00) Africa/Libreville
    [Africa/Ndjamena] => (GMT+01:00) Africa/Ndjamena
    [Africa/Lagos] => (GMT+01:00) Africa/Lagos
    [Africa/Niamey] => (GMT+01:00) Africa/Niamey
    [Africa/Porto-Novo] => (GMT+01:00) Africa/Porto-Novo
    [Africa/Sao_Tome] => (GMT+01:00) Africa/Sao_Tome
    [Africa/Luanda] => (GMT+01:00) Africa/Luanda
    [Africa/Tunis] => (GMT+01:00) Africa/Tunis
    [Europe/Uzhgorod] => (GMT+02:00) Europe/Uzhgorod
    [Africa/Harare] => (GMT+02:00) Africa/Harare
    [Europe/Mariehamn] => (GMT+02:00) Europe/Mariehamn
    [Africa/Lubumbashi] => (GMT+02:00) Africa/Lubumbashi
    [Asia/Nicosia] => (GMT+02:00) Asia/Nicosia
    [Africa/Windhoek] => (GMT+02:00) Africa/Windhoek
    [Europe/Tallinn] => (GMT+02:00) Europe/Tallinn
    [Europe/Zaporozhye] => (GMT+02:00) Europe/Zaporozhye
    [Africa/Gaborone] => (GMT+02:00) Africa/Gaborone
    [Africa/Mbabane] => (GMT+02:00) Africa/Mbabane
    [Africa/Khartoum] => (GMT+02:00) Africa/Khartoum
    [Africa/Johannesburg] => (GMT+02:00) Africa/Johannesburg
    [Europe/Vilnius] => (GMT+02:00) Europe/Vilnius
    [Africa/Maseru] => (GMT+02:00) Africa/Maseru
    [Africa/Lusaka] => (GMT+02:00) Africa/Lusaka
    [Europe/Riga] => (GMT+02:00) Europe/Riga
    [Africa/Kigali] => (GMT+02:00) Africa/Kigali
    [Europe/Helsinki] => (GMT+02:00) Europe/Helsinki
    [Africa/Maputo] => (GMT+02:00) Africa/Maputo
    [Europe/Chisinau] => (GMT+02:00) Europe/Chisinau
    [Europe/Sofia] => (GMT+02:00) Europe/Sofia
    [Asia/Beirut] => (GMT+02:00) Asia/Beirut
    [Africa/Blantyre] => (GMT+02:00) Africa/Blantyre
    [Asia/Jerusalem] => (GMT+02:00) Asia/Jerusalem
    [Asia/Gaza] => (GMT+02:00) Asia/Gaza
    [Asia/Amman] => (GMT+02:00) Asia/Amman
    [Asia/Famagusta] => (GMT+02:00) Asia/Famagusta
    [Europe/Athens] => (GMT+02:00) Europe/Athens
    [Africa/Bujumbura] => (GMT+02:00) Africa/Bujumbura
    [Asia/Hebron] => (GMT+02:00) Asia/Hebron
    [Europe/Kaliningrad] => (GMT+02:00) Europe/Kaliningrad
    [Africa/Cairo] => (GMT+02:00) Africa/Cairo
    [Europe/Kiev] => (GMT+02:00) Europe/Kiev
    [Europe/Bucharest] => (GMT+02:00) Europe/Bucharest
    [Asia/Damascus] => (GMT+02:00) Asia/Damascus
    [Africa/Tripoli] => (GMT+02:00) Africa/Tripoli
    [Asia/Baghdad] => (GMT+03:00) Asia/Baghdad
    [Africa/Djibouti] => (GMT+03:00) Africa/Djibouti
    [Asia/Aden] => (GMT+03:00) Asia/Aden
    [Asia/Bahrain] => (GMT+03:00) Asia/Bahrain
    [Europe/Istanbul] => (GMT+03:00) Europe/Istanbul
    [Africa/Juba] => (GMT+03:00) Africa/Juba
    [Europe/Kirov] => (GMT+03:00) Europe/Kirov
    [Europe/Moscow] => (GMT+03:00) Europe/Moscow
    [Antarctica/Syowa] => (GMT+03:00) Antarctica/Syowa
    [Europe/Minsk] => (GMT+03:00) Europe/Minsk
    [Africa/Kampala] => (GMT+03:00) Africa/Kampala
    [Africa/Dar_es_Salaam] => (GMT+03:00) Africa/Dar_es_Salaam
    [Europe/Simferopol] => (GMT+03:00) Europe/Simferopol
    [Asia/Riyadh] => (GMT+03:00) Asia/Riyadh
    [Indian/Antananarivo] => (GMT+03:00) Indian/Antananarivo
    [Asia/Kuwait] => (GMT+03:00) Asia/Kuwait
    [Africa/Nairobi] => (GMT+03:00) Africa/Nairobi
    [Indian/Mayotte] => (GMT+03:00) Indian/Mayotte
    [Africa/Mogadishu] => (GMT+03:00) Africa/Mogadishu
    [Asia/Qatar] => (GMT+03:00) Asia/Qatar
    [Europe/Volgograd] => (GMT+03:00) Europe/Volgograd
    [Africa/Asmara] => (GMT+03:00) Africa/Asmara
    [Africa/Addis_Ababa] => (GMT+03:00) Africa/Addis_Ababa
    [Indian/Comoro] => (GMT+03:00) Indian/Comoro
    [Asia/Tehran] => (GMT+03:30) Asia/Tehran
    [Europe/Saratov] => (GMT+04:00) Europe/Saratov
    [Indian/Reunion] => (GMT+04:00) Indian/Reunion
    [Europe/Astrakhan] => (GMT+04:00) Europe/Astrakhan
    [Asia/Baku] => (GMT+04:00) Asia/Baku
    [Asia/Dubai] => (GMT+04:00) Asia/Dubai
    [Indian/Mauritius] => (GMT+04:00) Indian/Mauritius
    [Indian/Mahe] => (GMT+04:00) Indian/Mahe
    [Asia/Tbilisi] => (GMT+04:00) Asia/Tbilisi
    [Asia/Yerevan] => (GMT+04:00) Asia/Yerevan
    [Asia/Muscat] => (GMT+04:00) Asia/Muscat
    [Europe/Samara] => (GMT+04:00) Europe/Samara
    [Europe/Ulyanovsk] => (GMT+04:00) Europe/Ulyanovsk
    [Asia/Kabul] => (GMT+04:30) Asia/Kabul
    [Antarctica/Mawson] => (GMT+05:00) Antarctica/Mawson
    [Asia/Samarkand] => (GMT+05:00) Asia/Samarkand
    [Asia/Aqtobe] => (GMT+05:00) Asia/Aqtobe
    [Indian/Maldives] => (GMT+05:00) Indian/Maldives
    [Asia/Ashgabat] => (GMT+05:00) Asia/Ashgabat
    [Asia/Atyrau] => (GMT+05:00) Asia/Atyrau
    [Asia/Dushanbe] => (GMT+05:00) Asia/Dushanbe
    [Asia/Yekaterinburg] => (GMT+05:00) Asia/Yekaterinburg
    [Asia/Oral] => (GMT+05:00) Asia/Oral
    [Asia/Aqtau] => (GMT+05:00) Asia/Aqtau
    [Asia/Karachi] => (GMT+05:00) Asia/Karachi
    [Asia/Tashkent] => (GMT+05:00) Asia/Tashkent
    [Indian/Kerguelen] => (GMT+05:00) Indian/Kerguelen
    [Asia/Colombo] => (GMT+05:30) Asia/Colombo
    [Asia/Kolkata] => (GMT+05:30) Asia/Kolkata
    [Asia/Kathmandu] => (GMT+05:45) Asia/Kathmandu
    [Antarctica/Vostok] => (GMT+06:00) Antarctica/Vostok
    [Indian/Chagos] => (GMT+06:00) Indian/Chagos
    [Asia/Almaty] => (GMT+06:00) Asia/Almaty
    [Asia/Omsk] => (GMT+06:00) Asia/Omsk
    [Asia/Dhaka] => (GMT+06:00) Asia/Dhaka
    [Asia/Bishkek] => (GMT+06:00) Asia/Bishkek
    [Asia/Urumqi] => (GMT+06:00) Asia/Urumqi
    [Asia/Thimphu] => (GMT+06:00) Asia/Thimphu
    [Asia/Qyzylorda] => (GMT+06:00) Asia/Qyzylorda
    [Indian/Cocos] => (GMT+06:30) Indian/Cocos
    [Asia/Yangon] => (GMT+06:30) Asia/Yangon
    [Asia/Novokuznetsk] => (GMT+07:00) Asia/Novokuznetsk
    [Asia/Barnaul] => (GMT+07:00) Asia/Barnaul
    [Antarctica/Davis] => (GMT+07:00) Antarctica/Davis
    [Asia/Novosibirsk] => (GMT+07:00) Asia/Novosibirsk
    [Asia/Krasnoyarsk] => (GMT+07:00) Asia/Krasnoyarsk
    [Asia/Phnom_Penh] => (GMT+07:00) Asia/Phnom_Penh
    [Asia/Pontianak] => (GMT+07:00) Asia/Pontianak
    [Asia/Jakarta] => (GMT+07:00) Asia/Jakarta
    [Asia/Hovd] => (GMT+07:00) Asia/Hovd
    [Asia/Tomsk] => (GMT+07:00) Asia/Tomsk
    [Asia/Ho_Chi_Minh] => (GMT+07:00) Asia/Ho_Chi_Minh
    [Asia/Vientiane] => (GMT+07:00) Asia/Vientiane
    [Indian/Christmas] => (GMT+07:00) Indian/Christmas
    [Asia/Bangkok] => (GMT+07:00) Asia/Bangkok
    [Asia/Choibalsan] => (GMT+08:00) Asia/Choibalsan
    [Asia/Taipei] => (GMT+08:00) Asia/Taipei
    [Asia/Makassar] => (GMT+08:00) Asia/Makassar
    [Asia/Macau] => (GMT+08:00) Asia/Macau
    [Asia/Kuching] => (GMT+08:00) Asia/Kuching
    [Asia/Kuala_Lumpur] => (GMT+08:00) Asia/Kuala_Lumpur
    [Asia/Shanghai] => (GMT+08:00) Asia/Shanghai
    [Asia/Singapore] => (GMT+08:00) Asia/Singapore
    [Asia/Brunei] => (GMT+08:00) Asia/Brunei
    [Asia/Irkutsk] => (GMT+08:00) Asia/Irkutsk
    [Asia/Ulaanbaatar] => (GMT+08:00) Asia/Ulaanbaatar
    [Australia/Perth] => (GMT+08:00) Australia/Perth
    [Asia/Hong_Kong] => (GMT+08:00) Asia/Hong_Kong
    [Antarctica/Casey] => (GMT+08:00) Antarctica/Casey
    [Asia/Manila] => (GMT+08:00) Asia/Manila
    [Australia/Eucla] => (GMT+08:45) Australia/Eucla
    [Asia/Jayapura] => (GMT+09:00) Asia/Jayapura
    [Asia/Khandyga] => (GMT+09:00) Asia/Khandyga
    [Pacific/Palau] => (GMT+09:00) Pacific/Palau
    [Asia/Dili] => (GMT+09:00) Asia/Dili
    [Asia/Yakutsk] => (GMT+09:00) Asia/Yakutsk
    [Asia/Tokyo] => (GMT+09:00) Asia/Tokyo
    [Asia/Seoul] => (GMT+09:00) Asia/Seoul
    [Asia/Chita] => (GMT+09:00) Asia/Chita
    [Asia/Pyongyang] => (GMT+09:00) Asia/Pyongyang
    [Australia/Darwin] => (GMT+09:30) Australia/Darwin
    [Asia/Ust-Nera] => (GMT+10:00) Asia/Ust-Nera
    [Pacific/Chuuk] => (GMT+10:00) Pacific/Chuuk
    [Antarctica/DumontDUrville] => (GMT+10:00) Antarctica/DumontDUrville
    [Pacific/Guam] => (GMT+10:00) Pacific/Guam
    [Pacific/Port_Moresby] => (GMT+10:00) Pacific/Port_Moresby
    [Asia/Vladivostok] => (GMT+10:00) Asia/Vladivostok
    [Australia/Brisbane] => (GMT+10:00) Australia/Brisbane
    [Australia/Lindeman] => (GMT+10:00) Australia/Lindeman
    [Pacific/Saipan] => (GMT+10:00) Pacific/Saipan
    [Australia/Adelaide] => (GMT+10:30) Australia/Adelaide
    [Australia/Broken_Hill] => (GMT+10:30) Australia/Broken_Hill
    [Australia/Sydney] => (GMT+11:00) Australia/Sydney
    [Antarctica/Macquarie] => (GMT+11:00) Antarctica/Macquarie
    [Pacific/Noumea] => (GMT+11:00) Pacific/Noumea
    [Pacific/Norfolk] => (GMT+11:00) Pacific/Norfolk
    [Australia/Melbourne] => (GMT+11:00) Australia/Melbourne
    [Pacific/Kosrae] => (GMT+11:00) Pacific/Kosrae
    [Pacific/Pohnpei] => (GMT+11:00) Pacific/Pohnpei
    [Australia/Currie] => (GMT+11:00) Australia/Currie
    [Pacific/Guadalcanal] => (GMT+11:00) Pacific/Guadalcanal
    [Pacific/Efate] => (GMT+11:00) Pacific/Efate
    [Australia/Hobart] => (GMT+11:00) Australia/Hobart
    [Asia/Magadan] => (GMT+11:00) Asia/Magadan
    [Asia/Sakhalin] => (GMT+11:00) Asia/Sakhalin
    [Pacific/Bougainville] => (GMT+11:00) Pacific/Bougainville
    [Australia/Lord_Howe] => (GMT+11:00) Australia/Lord_Howe
    [Asia/Srednekolymsk] => (GMT+11:00) Asia/Srednekolymsk
    [Pacific/Fiji] => (GMT+12:00) Pacific/Fiji
    [Pacific/Wake] => (GMT+12:00) Pacific/Wake
    [Pacific/Nauru] => (GMT+12:00) Pacific/Nauru
    [Pacific/Majuro] => (GMT+12:00) Pacific/Majuro
    [Asia/Kamchatka] => (GMT+12:00) Asia/Kamchatka
    [Pacific/Kwajalein] => (GMT+12:00) Pacific/Kwajalein
    [Pacific/Funafuti] => (GMT+12:00) Pacific/Funafuti
    [Pacific/Wallis] => (GMT+12:00) Pacific/Wallis
    [Asia/Anadyr] => (GMT+12:00) Asia/Anadyr
    [Pacific/Tarawa] => (GMT+12:00) Pacific/Tarawa
    [Pacific/Fakaofo] => (GMT+13:00) Pacific/Fakaofo
    [Pacific/Enderbury] => (GMT+13:00) Pacific/Enderbury
    [Pacific/Auckland] => (GMT+13:00) Pacific/Auckland
    [Antarctica/McMurdo] => (GMT+13:00) Antarctica/McMurdo
    [Pacific/Tongatapu] => (GMT+13:00) Pacific/Tongatapu
    [Pacific/Chatham] => (GMT+13:45) Pacific/Chatham
    [Pacific/Kiritimati] => (GMT+14:00) Pacific/Kiritimati
    [Pacific/Apia] => (GMT+14:00) Pacific/Apia
)

For those using CodeIgniter, there's a built-in Date Helper function called timezone_menu. These:

$this->load->helper('date');
echo timezone_menu('GMT', 'form-control', 'dropdown-name', ['id' => 'ci-timezone']);

Produce the following output:

<select name="dropdown-name" class="form-control" id="ci-timezone">
  <option value="UM12">(UTC -12:00) Baker/Howland Island</option>
  <option value="UM11">(UTC -11:00) Niue</option>
  <option value="UM10">(UTC -10:00) Hawaii-Aleutian Standard Time, Cook Islands, Tahiti</option>
  <option value="UM95">(UTC -9:30) Marquesas Islands</option>
  <option value="UM9">(UTC -9:00) Alaska Standard Time, Gambier Islands</option>
  <option value="UM8">(UTC -8:00) Pacific Standard Time, Clipperton Island</option>
  <option value="UM7">(UTC -7:00) Mountain Standard Time</option>
  <option value="UM6">(UTC -6:00) Central Standard Time</option>
  <option value="UM5">(UTC -5:00) Eastern Standard Time, Western Caribbean Standard Time</option>
  <option value="UM45">(UTC -4:30) Venezuelan Standard Time</option>
  <option value="UM4">(UTC -4:00) Atlantic Standard Time, Eastern Caribbean Standard Time</option>
  <option value="UM35">(UTC -3:30) Newfoundland Standard Time</option>
  <option value="UM3">(UTC -3:00) Argentina, Brazil, French Guiana, Uruguay</option>
  <option value="UM2">(UTC -2:00) South Georgia/South Sandwich Islands</option>
  <option value="UM1">(UTC -1:00) Azores, Cape Verde Islands</option>
  <option value="UTC" selected="selected">(UTC) Greenwich Mean Time, Western European Time</option>
  <option value="UP1">(UTC +1:00) Central European Time, West Africa Time</option>
  <option value="UP2">(UTC +2:00) Central Africa Time, Eastern European Time, Kaliningrad Time</option>
  <option value="UP3">(UTC +3:00) Moscow Time, East Africa Time, Arabia Standard Time</option>
  <option value="UP35">(UTC +3:30) Iran Standard Time</option>
  <option value="UP4">(UTC +4:00) Azerbaijan Standard Time, Samara Time</option>
  <option value="UP45">(UTC +4:30) Afghanistan</option>
  <option value="UP5">(UTC +5:00) Pakistan Standard Time, Yekaterinburg Time</option>
  <option value="UP55">(UTC +5:30) Indian Standard Time, Sri Lanka Time</option>
  <option value="UP575">(UTC +5:45) Nepal Time</option>
  <option value="UP6">(UTC +6:00) Bangladesh Standard Time, Bhutan Time, Omsk Time</option>
  <option value="UP65">(UTC +6:30) Cocos Islands, Myanmar</option>
  <option value="UP7">(UTC +7:00) Krasnoyarsk Time, Cambodia, Laos, Thailand, Vietnam</option>
  <option value="UP8">(UTC +8:00) Australian Western Standard Time, Beijing Time, Irkutsk Time</option>
  <option value="UP875">(UTC +8:45) Australian Central Western Standard Time</option>
  <option value="UP9">(UTC +9:00) Japan Standard Time, Korea Standard Time, Yakutsk Time</option>
  <option value="UP95">(UTC +9:30) Australian Central Standard Time</option>
  <option value="UP10">(UTC +10:00) Australian Eastern Standard Time, Vladivostok Time</option>
  <option value="UP105">(UTC +10:30) Lord Howe Island</option>
  <option value="UP11">(UTC +11:00) Srednekolymsk Time, Solomon Islands, Vanuatu</option>
  <option value="UP115">(UTC +11:30) Norfolk Island</option>
  <option value="UP12">(UTC +12:00) Fiji, Gilbert Islands, Kamchatka Time, New Zealand Standard Time</option>
  <option value="UP1275">(UTC +12:45) Chatham Islands Standard Time</option>
  <option value="UP13">(UTC +13:00) Samoa Time Zone, Phoenix Islands Time, Tonga</option>
  <option value="UP14">(UTC +14:00) Line Islands</option>
</select>

I did this:

php -r "echo json_encode(array_combine(DateTimeZone::listIdentifiers(DateTimeZone::ALL), DateTimeZone::listIdentifiers(DateTimeZone::ALL)));" > list-of-timezones.json

I would like to leave here this idea:

/*----------TIME ZONE LIST---------*/
function TZList($data_type = false){
    $_all_timezone_identifiers = DateTimeZone::listIdentifiers(DateTimeZone::ALL);
    $TIMEZONE_LIST = array();
    foreach($_all_timezone_identifiers as $k => $v){
        $_tzone_group = explode("/", $_all_timezone_identifiers[$k])[0];

        $_tzone_new = new DateTimeZone($_all_timezone_identifiers[$k]);
        $_tzone_new_date = new DateTime("now", $_tzone_new);

        $tzone_arr = array(
                            'timezone' => $_all_timezone_identifiers[$k],
                            'timediff' => $_tzone_new_date->format('P'),
                            'timezone_offset' => $_tzone_new_date->format('Z')/60, //minutes
                            'text' => "(GMT" .$_tzone_new_date->format('P') .") " .$_all_timezone_identifiers[$k]
                            );

        //BY CONTINENT
        if($data_type === true) $TIMEZONE_LIST[$_tzone_group][] = $tzone_arr; else $TIMEZONE_LIST[] = $tzone_arr;
    }

    //BY TIMEZONE: "America/New_York"
    if(is_string($data_type)){
        $key = array_search($data_type, array_column($TIMEZONE_LIST, 'timezone'));
        $TIMEZONE_LIST = $key !== false ? $TIMEZONE_LIST[$key] : null;
    }

    return $TIMEZONE_LIST;
}
/*--------------------------------*/

Thank you.

America Country - Time with Timezones List in Array Format.

$america_timezones_list = array(
        '+00:00||America/Danmarkshavn'=>'(+00:00) Danmarkshavn',
        '-01:00||America/Scoresbysund'=>'(-01:00) Scoresbysund',
        '-02:00||America/Miquelon'=>'(-02:00) Miquelon',
        '-02:00||America/Noronha'=>'(-02:00) Noronha',
        '-02:30||America/St_Johns'=>'(-02:30) St_Johns',
        '-03:00||America/Araguaina'=>'(-03:00) Araguaina',
        '-03:00||America/Argentina/Buenos_Aires'=>'(-03:00) Argentina/Buenos_Aires',
        '-03:00||America/Argentina/Catamarca'=>'(-03:00) Argentina/Catamarca',
        '-03:00||America/Argentina/Cordoba'=>'(-03:00) Argentina/Cordoba',
        '-03:00||America/Argentina/Jujuy'=>'(-03:00) Argentina/Jujuy',
        '-03:00||America/Argentina/La_Rioja'=>'(-03:00) Argentina/La_Rioja',
        '-03:00||America/Argentina/Mendoza'=>'(-03:00) Argentina/Mendoza',
        '-03:00||America/Argentina/Rio_Gallegos'=>'(-03:00) Argentina/Rio_Gallegos',
        '-03:00||America/Argentina/Salta'=>'(-03:00) Argentina/Salta',
        '-03:00||America/Argentina/San_Juan'=>'(-03:00) Argentina/San_Juan',
        '-03:00||America/Argentina/San_Luis'=>'(-03:00) Argentina/San_Luis',
        '-03:00||America/Argentina/Tucuman'=>'(-03:00) Argentina/Tucuman',
        '-03:00||America/Argentina/Ushuaia'=>'(-03:00) Argentina/Ushuaia',
        '-03:00||America/Asuncion'=>'(-03:00) Asuncion',
        '-03:00||America/Bahia'=>'(-03:00) Bahia',
        '-03:00||America/Belem'=>'(-03:00) Belem',
        '-03:00||America/Cayenne'=>'(-03:00) Cayenne',
        '-03:00||America/Fortaleza'=>'(-03:00) Fortaleza',
        '-03:00||America/Glace_Bay'=>'(-03:00) Glace_Bay',
        '-03:00||America/Godthab'=>'(-03:00) Godthab',
        '-03:00||America/Goose_Bay'=>'(-03:00) Goose_Bay',
        '-03:00||America/Halifax'=>'(-03:00) Halifax',
        '-03:00||America/Maceio'=>'(-03:00) Maceio',
        '-03:00||America/Moncton'=>'(-03:00) Moncton',
        '-03:00||America/Montevideo'=>'(-03:00) Montevideo',
        '-03:00||America/Paramaribo'=>'(-03:00) Paramaribo',
        '-03:00||America/Punta_Arenas'=>'(-03:00) Punta_Arenas',
        '-03:00||America/Recife'=>'(-03:00) Recife',
        '-03:00||America/Santarem'=>'(-03:00) Santarem',
        '-03:00||America/Santiago'=>'(-03:00) Santiago',
        '-03:00||America/Sao_Paulo'=>'(-03:00) Sao_Paulo',
        '-03:00||America/Thule'=>'(-03:00) Thule',
        '-04:00||America/Anguilla'=>'(-04:00) Anguilla',
        '-04:00||America/Antigua'=>'(-04:00) Antigua',
        '-04:00||America/Aruba'=>'(-04:00) Aruba',
        '-04:00||America/Barbados'=>'(-04:00) Barbados',
        '-04:00||America/Blanc-Sablon'=>'(-04:00) Blanc-Sablon',
        '-04:00||America/Boa_Vista'=>'(-04:00) Boa_Vista',
        '-04:00||America/Campo_Grande'=>'(-04:00) Campo_Grande',
        '-04:00||America/Caracas'=>'(-04:00) Caracas',
        '-04:00||America/Cuiaba'=>'(-04:00) Cuiaba',
        '-04:00||America/Curacao'=>'(-04:00) Curacao',
        '-04:00||America/Detroit'=>'(-04:00) Detroit',
        '-04:00||America/Dominica'=>'(-04:00) Dominica',
        '-04:00||America/Grand_Turk'=>'(-04:00) Grand_Turk',
        '-04:00||America/Grenada'=>'(-04:00) Grenada',
        '-04:00||America/Guadeloupe'=>'(-04:00) Guadeloupe',
        '-04:00||America/Guyana'=>'(-04:00) Guyana',
        '-04:00||America/Havana'=>'(-04:00) Havana',
        '-04:00||America/Indiana/Indianapolis'=>'(-04:00) Indiana/Indianapolis',
        '-04:00||America/Indiana/Marengo'=>'(-04:00) Indiana/Marengo',
        '-04:00||America/Indiana/Petersburg'=>'(-04:00) Indiana/Petersburg',
        '-04:00||America/Indiana/Vevay'=>'(-04:00) Indiana/Vevay',
        '-04:00||America/Indiana/Vincennes'=>'(-04:00) Indiana/Vincennes',
        '-04:00||America/Indiana/Winamac'=>'(-04:00) Indiana/Winamac',
        '-04:00||America/Iqaluit'=>'(-04:00) Iqaluit',
        '-04:00||America/Kentucky/Louisville'=>'(-04:00) Kentucky/Louisville',
        '-04:00||America/Kentucky/Monticello'=>'(-04:00) Kentucky/Monticello',
        '-04:00||America/Kralendijk'=>'(-04:00) Kralendijk',
        '-04:00||America/La_Paz'=>'(-04:00) La_Paz',
        '-04:00||America/Lower_Princes'=>'(-04:00) Lower_Princes',
        '-04:00||America/Manaus'=>'(-04:00) Manaus',
        '-04:00||America/Marigot'=>'(-04:00) Marigot',
        '-04:00||America/Martinique'=>'(-04:00) Martinique',
        '-04:00||America/Montserrat'=>'(-04:00) Montserrat',
        '-04:00||America/Nassau'=>'(-04:00) Nassau',
        '-04:00||America/New_York'=>'(-04:00) New_York',
        '-04:00||America/Nipigon'=>'(-04:00) Nipigon',
        '-04:00||America/Pangnirtung'=>'(-04:00) Pangnirtung',
        '-04:00||America/Port-au-Prince'=>'(-04:00) Port-au-Prince',
        '-04:00||America/Port_of_Spain'=>'(-04:00) Port_of_Spain',
        '-04:00||America/Porto_Velho'=>'(-04:00) Porto_Velho',
        '-04:00||America/Puerto_Rico'=>'(-04:00) Puerto_Rico',
        '-04:00||America/Santo_Domingo'=>'(-04:00) Santo_Domingo',
        '-04:00||America/St_Barthelemy'=>'(-04:00) St_Barthelemy',
        '-04:00||America/St_Kitts'=>'(-04:00) St_Kitts',
        '-04:00||America/St_Lucia'=>'(-04:00) St_Lucia',
        '-04:00||America/St_Thomas'=>'(-04:00) St_Thomas',
        '-04:00||America/St_Vincent'=>'(-04:00) St_Vincent',
        '-04:00||America/Thunder_Bay'=>'(-04:00) Thunder_Bay',
        '-04:00||America/Toronto'=>'(-04:00) Toronto',
        '-04:00||America/Tortola'=>'(-04:00) Tortola',
        '-05:00||America/Atikokan'=>'(-05:00) Atikokan',
        '-05:00||America/Bogota'=>'(-05:00) Bogota',
        '-05:00||America/Cancun'=>'(-05:00) Cancun',
        '-05:00||America/Cayman'=>'(-05:00) Cayman',
        '-05:00||America/Chicago'=>'(-05:00) Chicago',
        '-05:00||America/Eirunepe'=>'(-05:00) Eirunepe',
        '-05:00||America/Guayaquil'=>'(-05:00) Guayaquil',
        '-05:00||America/Indiana/Knox'=>'(-05:00) Indiana/Knox',
        '-05:00||America/Indiana/Tell_City'=>'(-05:00) Indiana/Tell_City',
        '-05:00||America/Jamaica'=>'(-05:00) Jamaica',
        '-05:00||America/Lima'=>'(-05:00) Lima',
        '-05:00||America/Matamoros'=>'(-05:00) Matamoros',
        '-05:00||America/Menominee'=>'(-05:00) Menominee',
        '-05:00||America/North_Dakota/Beulah'=>'(-05:00) North_Dakota/Beulah',
        '-05:00||America/North_Dakota/Center'=>'(-05:00) North_Dakota/Center',
        '-05:00||America/North_Dakota/New_Salem'=>'(-05:00) North_Dakota/New_Salem',
        '-05:00||America/Panama'=>'(-05:00) Panama',
        '-05:00||America/Rainy_River'=>'(-05:00) Rainy_River',
        '-05:00||America/Rankin_Inlet'=>'(-05:00) Rankin_Inlet',
        '-05:00||America/Resolute'=>'(-05:00) Resolute',
        '-05:00||America/Rio_Branco'=>'(-05:00) Rio_Branco',
        '-05:00||America/Winnipeg'=>'(-05:00) Winnipeg',
        '-06:00||America/Bahia_Banderas'=>'(-06:00) Bahia_Banderas',
        '-06:00||America/Belize'=>'(-06:00) Belize',
        '-06:00||America/Boise'=>'(-06:00) Boise',
        '-06:00||America/Cambridge_Bay'=>'(-06:00) Cambridge_Bay',
        '-06:00||America/Costa_Rica'=>'(-06:00) Costa_Rica',
        '-06:00||America/Denver'=>'(-06:00) Denver',
        '-06:00||America/Edmonton'=>'(-06:00) Edmonton',
        '-06:00||America/El_Salvador'=>'(-06:00) El_Salvador',
        '-06:00||America/Guatemala'=>'(-06:00) Guatemala',
        '-06:00||America/Inuvik'=>'(-06:00) Inuvik',
        '-06:00||America/Managua'=>'(-06:00) Managua',
        '-06:00||America/Merida'=>'(-06:00) Merida',
        '-06:00||America/Mexico_City'=>'(-06:00) Mexico_City',
        '-06:00||America/Monterrey'=>'(-06:00) Monterrey',
        '-06:00||America/Ojinaga'=>'(-06:00) Ojinaga',
        '-06:00||America/Regina'=>'(-06:00) Regina',
        '-06:00||America/Swift_Current'=>'(-06:00) Swift_Current',
        '-06:00||America/Tegucigalpa'=>'(-06:00) Tegucigalpa',
        '-06:00||America/Yellowknife'=>'(-06:00) Yellowknife',
        '-07:00||America/Chihuahua'=>'(-07:00) Chihuahua',
        '-07:00||America/Creston'=>'(-07:00) Creston',
        '-07:00||America/Dawson'=>'(-07:00) Dawson',
        '-07:00||America/Dawson_Creek'=>'(-07:00) Dawson_Creek',
        '-07:00||America/Fort_Nelson'=>'(-07:00) Fort_Nelson',
        '-07:00||America/Hermosillo'=>'(-07:00) Hermosillo',
        '-07:00||America/Los_Angeles'=>'(-07:00) Los_Angeles',
        '-07:00||America/Mazatlan'=>'(-07:00) Mazatlan',
        '-07:00||America/Phoenix'=>'(-07:00) Phoenix',
        '-07:00||America/Tijuana'=>'(-07:00) Tijuana',
        '-07:00||America/Vancouver'=>'(-07:00) Vancouver',
        '-07:00||America/Whitehorse'=>'(-07:00) Whitehorse',
        '-08:00||America/Anchorage'=>'(-08:00) Anchorage',
        '-08:00||America/Juneau'=>'(-08:00) Juneau',
        '-08:00||America/Metlakatla'=>'(-08:00) Metlakatla',
        '-08:00||America/Nome'=>'(-08:00) Nome',
        '-08:00||America/Sitka'=>'(-08:00) Sitka',
        '-08:00||America/Yakutat'=>'(-08:00) Yakutat',
        '-09:00||America/Adak'=>'(-09:00) Adak'
    );

I have used it in many projects, sharing to help you. Thanks for asking this question.

Related