This is the solution that I find better than a hardcoded array, because offsets are calculated dynamically.
<?php function toGmtOffset($timezone){ $userTimeZone = new DateTimeZone($timezone); $offset = $userTimeZone->getOffset(new DateTime("now",new DateTimeZone('GMT'))); // Offset in seconds $seconds = abs($offset); $sign = $offset > 0 ? '+' : '-'; $hours = floor($seconds / 3600); $mins = floor($seconds / 60 % 60); $secs = floor($seconds % 60); return sprintf("(GMT$sign%02d:%02d)", $hours, $mins, $secs); } $timezones = array('Pacific/Midway' => toGmtOffset('Pacific/Midway' ). " Midway Island",'US/Samoa' => toGmtOffset('US/Samoa' ). " Samoa",'US/Hawaii' => toGmtOffset('US/Hawaii' ). " Hawaii",'US/Alaska' => toGmtOffset('US/Alaska' ). " Alaska",'US/Pacific' => toGmtOffset('US/Pacific' ). " Pacific Time (US & Canada)",'America/Tijuana' => toGmtOffset('America/Tijuana' ). " Tijuana",'US/Arizona' => toGmtOffset('US/Arizona' ). " Arizona",'US/Mountain' => toGmtOffset('US/Mountain' ). " Mountain Time (US & Canada)",'America/Chihuahua' => toGmtOffset('America/Chihuahua' ). " Chihuahua",'America/Mazatlan' => toGmtOffset('America/Mazatlan' ). " Mazatlan",'America/Mexico_City' => toGmtOffset('America/Mexico_City' ). " Mexico City",'America/Monterrey' => toGmtOffset('America/Monterrey' ). " Monterrey",'Canada/Saskatchewan' => toGmtOffset('Canada/Saskatchewan' ). " Saskatchewan",'US/Central' => toGmtOffset('US/Central' ). " Central Time (US & Canada)",'US/Eastern' => toGmtOffset('US/Eastern' ). " Eastern Time (US & Canada)",'US/East-Indiana' => toGmtOffset('US/East-Indiana' ). " Indiana (East)",'America/Bogota' => toGmtOffset('America/Bogota' ). " Bogota",'America/Lima' => toGmtOffset('America/Lima' ). " Lima",'America/Caracas' => toGmtOffset('America/Caracas' ). " Caracas",'Canada/Atlantic' => toGmtOffset('Canada/Atlantic' ). " Atlantic Time (Canada)",'America/La_Paz' => toGmtOffset('America/La_Paz' ). " La Paz",'America/Santiago' => toGmtOffset('America/Santiago' ). " Santiago",'Canada/Newfoundland' => toGmtOffset('Canada/Newfoundland' ). " Newfoundland",'America/Buenos_Aires' => toGmtOffset('America/Buenos_Aires' ). " Buenos Aires",'Atlantic/Stanley' => toGmtOffset('Atlantic/Stanley' ). " Stanley",'Atlantic/Azores' => toGmtOffset('Atlantic/Azores' ). " Azores",'Atlantic/Cape_Verde' => toGmtOffset('Atlantic/Cape_Verde' ). " Cape Verde Is.",'Africa/Casablanca' => toGmtOffset('Africa/Casablanca' ). " Casablanca",'Europe/Dublin' => toGmtOffset('Europe/Dublin' ). " Dublin",'Europe/Lisbon' => toGmtOffset('Europe/Lisbon' ). " Lisbon",'Europe/London' => toGmtOffset('Europe/London' ). " London",'Africa/Monrovia' => toGmtOffset('Africa/Monrovia' ). " Monrovia",'Europe/Amsterdam' => toGmtOffset('Europe/Amsterdam' ). " Amsterdam",'Europe/Belgrade' => toGmtOffset('Europe/Belgrade' ). " Belgrade",'Europe/Berlin' => toGmtOffset('Europe/Berlin' ). " Berlin",'Europe/Bratislava' => toGmtOffset('Europe/Bratislava' ). " Bratislava",'Europe/Brussels' => toGmtOffset('Europe/Brussels' ). " Brussels",'Europe/Budapest' => toGmtOffset('Europe/Budapest' ). " Budapest",'Europe/Copenhagen' => toGmtOffset('Europe/Copenhagen' ). " Copenhagen",'Europe/Ljubljana' => toGmtOffset('Europe/Ljubljana' ). " Ljubljana",'Europe/Madrid' => toGmtOffset('Europe/Madrid' ). " Madrid",'Europe/Paris' => toGmtOffset('Europe/Paris' ). " Paris",'Europe/Prague' => toGmtOffset('Europe/Prague' ). " Prague",'Europe/Rome' => toGmtOffset('Europe/Rome' ). " Rome",'Europe/Sarajevo' => toGmtOffset('Europe/Sarajevo' ). " Sarajevo",'Europe/Skopje' => toGmtOffset('Europe/Skopje' ). " Skopje",'Europe/Stockholm' => toGmtOffset('Europe/Stockholm' ). " Stockholm",'Europe/Vienna' => toGmtOffset('Europe/Vienna' ). " Vienna",'Europe/Warsaw' => toGmtOffset('Europe/Warsaw' ). " Warsaw",'Europe/Zagreb' => toGmtOffset('Europe/Zagreb' ). " Zagreb",'Europe/Athens' => toGmtOffset('Europe/Athens' ). " Athens",'Europe/Bucharest' => toGmtOffset('Europe/Bucharest' ). " Bucharest",'Africa/Cairo' => toGmtOffset('Africa/Cairo' ). " Cairo",'Africa/Harare' => toGmtOffset('Africa/Harare' ). " Harare",'Europe/Helsinki' => toGmtOffset('Europe/Helsinki' ). " Helsinki",'Europe/Istanbul' => toGmtOffset('Europe/Istanbul' ). " Istanbul",'Asia/Jerusalem' => toGmtOffset('Asia/Jerusalem' ). " Jerusalem",'Europe/Kiev' => toGmtOffset('Europe/Kiev' ). " Kyiv",'Europe/Minsk' => toGmtOffset('Europe/Minsk' ). " Minsk",'Europe/Riga' => toGmtOffset('Europe/Riga' ). " Riga",'Europe/Sofia' => toGmtOffset('Europe/Sofia' ). " Sofia",'Europe/Tallinn' => toGmtOffset('Europe/Tallinn' ). " Tallinn",'Europe/Vilnius' => toGmtOffset('Europe/Vilnius' ). " Vilnius",'Asia/Baghdad' => toGmtOffset('Asia/Baghdad' ). " Baghdad",'Asia/Kuwait' => toGmtOffset('Asia/Kuwait' ). " Kuwait",'Africa/Nairobi' => toGmtOffset('Africa/Nairobi' ). " Nairobi",'Asia/Riyadh' => toGmtOffset('Asia/Riyadh' ). " Riyadh",'Europe/Moscow' => toGmtOffset('Europe/Moscow' ). " Moscow",'Asia/Tehran' => toGmtOffset('Asia/Tehran' ). " Tehran",'Asia/Baku' => toGmtOffset('Asia/Baku' ). " Baku",'Europe/Volgograd' => toGmtOffset('Europe/Volgograd' ). " Volgograd",'Asia/Muscat' => toGmtOffset('Asia/Muscat' ). " Muscat",'Asia/Tbilisi' => toGmtOffset('Asia/Tbilisi' ). " Tbilisi",'Asia/Yerevan' => toGmtOffset('Asia/Yerevan' ). " Yerevan",'Asia/Kabul' => toGmtOffset('Asia/Kabul' ). " Kabul",'Asia/Karachi' => toGmtOffset('Asia/Karachi' ). " Karachi",'Asia/Tashkent' => toGmtOffset('Asia/Tashkent' ). " Tashkent",'Asia/Kolkata' => toGmtOffset('Asia/Kolkata' ). " Kolkata",'Asia/Kathmandu' => toGmtOffset('Asia/Kathmandu' ). " Kathmandu",'Asia/Yekaterinburg' => toGmtOffset('Asia/Yekaterinburg' ). " Ekaterinburg",'Asia/Almaty' => toGmtOffset('Asia/Almaty' ). " Almaty",'Asia/Dhaka' => toGmtOffset('Asia/Dhaka' ). " Dhaka",'Asia/Novosibirsk' => toGmtOffset('Asia/Novosibirsk' ). " Novosibirsk",'Asia/Bangkok' => toGmtOffset('Asia/Bangkok' ). " Bangkok",'Asia/Jakarta' => toGmtOffset('Asia/Jakarta' ). " Jakarta",'Asia/Krasnoyarsk' => toGmtOffset('Asia/Krasnoyarsk' ). " Krasnoyarsk",'Asia/Chongqing' => toGmtOffset('Asia/Chongqing' ). " Chongqing",'Asia/Hong_Kong' => toGmtOffset('Asia/Hong_Kong' ). " Hong Kong",'Asia/Kuala_Lumpur' => toGmtOffset('Asia/Kuala_Lumpur' ). " Kuala Lumpur",'Australia/Perth' => toGmtOffset('Australia/Perth' ). " Perth",'Asia/Singapore' => toGmtOffset('Asia/Singapore' ). " Singapore",'Asia/Taipei' => toGmtOffset('Asia/Taipei' ). " Taipei",'Asia/Ulaanbaatar' => toGmtOffset('Asia/Ulaanbaatar' ). " Ulaan Bataar",'Asia/Urumqi' => toGmtOffset('Asia/Urumqi' ). " Urumqi",'Asia/Irkutsk' => toGmtOffset('Asia/Irkutsk' ). " Irkutsk",'Asia/Seoul' => toGmtOffset('Asia/Seoul' ). " Seoul",'Asia/Tokyo' => toGmtOffset('Asia/Tokyo' ). " Tokyo",'Australia/Adelaide' => toGmtOffset('Australia/Adelaide' ). " Adelaide",'Australia/Darwin' => toGmtOffset('Australia/Darwin' ). " Darwin",'Asia/Yakutsk' => toGmtOffset('Asia/Yakutsk' ). " Yakutsk",'Australia/Brisbane' => toGmtOffset('Australia/Brisbane' ). " Brisbane",'Australia/Canberra' => toGmtOffset('Australia/Canberra' ). " Canberra",'Pacific/Guam' => toGmtOffset('Pacific/Guam' ). " Guam",'Australia/Hobart' => toGmtOffset('Australia/Hobart' ). " Hobart",'Australia/Melbourne' => toGmtOffset('Australia/Melbourne' ). " Melbourne",'Pacific/Port_Moresby' => toGmtOffset('Pacific/Port_Moresby' ). " Port Moresby",'Australia/Sydney' => toGmtOffset('Australia/Sydney' ). " Sydney",'Asia/Vladivostok' => toGmtOffset('Asia/Vladivostok' ). " Vladivostok",'Asia/Magadan' => toGmtOffset('Asia/Magadan' ). " Magadan",'Pacific/Auckland' => toGmtOffset('Pacific/Auckland' ). " Auckland",'Pacific/Fiji' => toGmtOffset('Pacific/Fiji' ). " Fiji", );