दिलचस्प पोस्ट
विंडोज फॉर्म कंट्रोल से नाम से नियंत्रण ढूंढें डाटा स्टोअर स्ट्रक्चर / क्लासेस के लिए सबसे अच्छा कौन सा है? Wmp सर्वर में SSL स्थापना: httpd-ssl.conf में त्रुटि जाओ में, मैं किसी स्ट्रिंग के स्ट्रिंग को स्ट्रिंग में कैसे कैद कर सकता हूं? आपका पसंदीदा पायथन मजाकिया पुस्तकालय क्या है? सॉर्टेडलिस्ट और सॉर्टेड ऑब्जेक्टरीज़ में अंतर क्या है? कैसे html कैनवास तत्व का आकार बदलना है? बूटस्ट्रैप के साथ प्राइमफैसेस का उपयोग पैडिंग / साइजिंग / सीमाओं में परिवर्तन के कारण होता है Django टेम्पलेट चर और जावास्क्रिप्ट स्विफ्ट: आईएसओ 8601, आरएफसी 3339, यूटीसी समय क्षेत्र के रूप में एक डेट टाइम स्टाम्प और प्रारूप कैसे बना सकता है? टी / टी को ओवरराइड किए बिना पासवर्ड कैसे पास करें? एनएलटीके में पार्सिंग के लिए अंग्रेजी व्याकरण एजेएक्स द्वारा डाली गतिशील निर्मित तत्वों पर बाँध की घटनाएं (चेक बॉक्स) क्या मैं pthreads / Linux में किसी धागे का नाम सेट कर सकता हूँ? त्रुटि: jQuery को एक दस्तावेज़ के साथ एक विंडो की आवश्यकता है

पीएचपी के साथ समय क्षेत्र की एक ड्रॉप डाउन सूची उत्पन्न करना

अधिकांश साइटों को उपयोगकर्ताओं को पसंद किए गए टाइमज़ोन में साइट पर तिथियों को दिखाने के लिए कुछ तरीके की आवश्यकता होती है। नीचे दिए गए दो सूचियां हैं जो मुझे मिलीं और फिर PHP 5 में PHP DateTime वर्ग में निर्मित एक विधि

मुझे यह जानने में मदद की ज़रूरत है कि उपयोगकर्ता के रजिस्टर से यूटीसी ऑफ़सेट प्राप्त करने की कोशिश करते समय इनमें से कौन सी सबसे अच्छा उपयोग करने का प्रयास करेगा।

एक:

<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> 

या PHP के अनुकूल मूल्यों का उपयोग कर:

 <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> 

या बस PHP ही का उपयोग कर:

 $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 ); 

ऐसा लगता है कि पिछले एक सबसे सुरक्षित होगा क्योंकि यह PHP रिलीज के उपयोग से बढ़ेगा। शहर के नामों के लिए टाईमज़ोन को टाई करने के लिए आपको उस सरणी को फ़्लिप भी कर सकते हैं।

Solutions Collecting From Web of "पीएचपी के साथ समय क्षेत्र की एक ड्रॉप डाउन सूची उत्पन्न करना"

मैं इसे PHP में करूँगा, सिवाय मैं preg_match 100 से कुछ समय से बचना चाहूंगा और इसे अपनी सूची बनाने के लिए करूँगा।

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

इसके अलावा, मैं 'समयक्षेत्र' के लिए PHP के नामों का उपयोग करेगा और जीएमटी ऑफ़सेट्स के बारे में भूल जाऊंगा, जो डीएसटी के आधार पर बदल जाएगा। पीएचपीबीबी में ऐसा कोड है जो उसी तरह बी / सी है जो अभी भी PHP4 का समर्थन कर रहे हैं और डेटटाइम या डेटटाइमजोन ऑब्जेक्ट्स पर निर्भर नहीं हो सकते हैं।

उपरोक्त user210179 के बाद के उदाहरण, मैंने अपने ऑफ़सेट के साथ सभी समयक्षेत्रों की सूची बनाने के लिए निम्नलिखित फ़ंक्शन लिखी है:

 function generate_timezone_list() { static $regions = array( DateTimeZone::AFRICA, DateTimeZone::AMERICA, DateTimeZone::ANTARCTICA, DateTimeZone::ASIA, DateTimeZone::ATLANTIC, DateTimeZone::AUSTRALIA, DateTimeZone::EUROPE, DateTimeZone::INDIAN, DateTimeZone::PACIFIC, ); $timezones = array(); foreach( $regions as $region ) { $timezones = array_merge( $timezones, DateTimeZone::listIdentifiers( $region ) ); } $timezone_offsets = array(); foreach( $timezones as $timezone ) { $tz = new DateTimeZone($timezone); $timezone_offsets[$timezone] = $tz->getOffset(new DateTime); } // sort timezone by offset asort($timezone_offsets); $timezone_list = array(); foreach( $timezone_offsets as $timezone => $offset ) { $offset_prefix = $offset < 0 ? '-' : '+'; $offset_formatted = gmdate( 'H:i', abs($offset) ); $pretty_offset = "UTC${offset_prefix}${offset_formatted}"; $timezone_list[$timezone] = "(${pretty_offset}) $timezone"; } return $timezone_list; } 

इससे एक सरणी उत्पन्न होगी जैसे:

 [Pacific/Midway] => (UTC-11:00) Pacific/Midway [Pacific/Pago_Pago] => (UTC-11:00) Pacific/Pago_Pago [Pacific/Niue] => (UTC-11:00) Pacific/Niue [Pacific/Honolulu] => (UTC-10:00) Pacific/Honolulu [Pacific/Fakaofo] => (UTC-10:00) Pacific/Fakaofo … 

यह वर्तमान में ऑफसेट्स द्वारा सॉर्ट किया गया है, लेकिन आप आसानी से ksort() बजाय ksort() करके ksort() नाम से सॉर्ट कर सकते हैं।

मौजूदा उत्तरों की संख्या के बावजूद, मैंने इस समस्या का एक और उपाय भी बना दिया है। मेरे कार्यान्वयन के समर्थक हैं:

  • समय क्षेत्र की सूची गतिशील रूप से उत्पन्न होती है, और इस प्रकार स्वतः समय अपडेट होता है जब समयक्षेत्र (PHP में) बदल सकता है।
  • टाइमज़न नाम सुंदर हैं उदाहरण के लिए, "America / St_Barthelemy" "अमेरिका, सेंट बार्थलेमी" बन जाता है।
  • ऑफसेट और नाम पर समयक्षेत्र सॉर्ट किया गया है Toland के जवाब ऑफसेट पर केवल तरह, जिसके परिणामस्वरूप एक ही ऑफसेट के भीतर समयबद्धन के क्रमबद्ध समूह
  • ऑफसेट जानकारी DateTimeZone::listAbbreviations से प्राप्त नहीं की DateTimeZone::listAbbreviations , क्योंकि उस पद्धति ने ऐतिहासिक समयक्षेत्र जानकारी भी वापस की है Favio का जवाब इस पद्धति का उपयोग करता है, जिसके परिणामस्वरूप गलत (ऐतिहासिक) ऑफसेट होता है
  • टाइम ज़ोन की सूची केवल तभी उत्पन्न होती है जब पहले अनुरोध किया गया (और 'कैश्ड' स्थिर वैरिएबल का उपयोग करके)।

यहां पूर्ण कोड है:

 function timezone_list() { static $timezones = null; if ($timezones === null) { $timezones = []; $offsets = []; $now = new DateTime('now', new DateTimeZone('UTC')); foreach (DateTimeZone::listIdentifiers() as $timezone) { $now->setTimezone(new DateTimeZone($timezone)); $offsets[] = $offset = $now->getOffset(); $timezones[$timezone] = '(' . format_GMT_offset($offset) . ') ' . format_timezone_name($timezone); } array_multisort($offsets, $timezones); } return $timezones; } function format_GMT_offset($offset) { $hours = intval($offset / 3600); $minutes = abs(intval($offset % 3600 / 60)); return 'GMT' . ($offset ? sprintf('%+03d:%02d', $hours, $minutes) : ''); } function format_timezone_name($name) { $name = str_replace('/', ', ', $name); $name = str_replace('_', ' ', $name); $name = str_replace('St ', 'St. ', $name); return $name; } 

और यहां उत्पादन का एक उदाहरण है

 Array ( [Pacific/Midway] => (GMT-11:00) Pacific, Midway [Pacific/Niue] => (GMT-11:00) Pacific, Niue [Pacific/Pago_Pago] => (GMT-11:00) Pacific, Pago Pago [America/Adak] => (GMT-10:00) America, Adak [Pacific/Honolulu] => (GMT-10:00) Pacific, Honolulu [Pacific/Johnston] => (GMT-10:00) Pacific, Johnston [Pacific/Rarotonga] => (GMT-10:00) Pacific, Rarotonga [Pacific/Tahiti] => (GMT-10:00) Pacific, Tahiti [Pacific/Marquesas] => (GMT-09:30) Pacific, Marquesas [America/Anchorage] => (GMT-09:00) America, Anchorage ... ) 

मैं ऐसा निम्नलिखित कोड से करूंगा जो स्वीकार किए गए उत्तर के समान है (मुझे पता है कि कोड को पुन: लागू किया जा सकता है :)):

  $list = DateTimeZone::listAbbreviations(); $idents = DateTimeZone::listIdentifiers(); $data = $offset = $added = array(); foreach ($list as $abbr => $info) { foreach ($info as $zone) { if ( ! empty($zone['timezone_id']) AND ! in_array($zone['timezone_id'], $added) AND in_array($zone['timezone_id'], $idents)) { $z = new DateTimeZone($zone['timezone_id']); $c = new DateTime(null, $z); $zone['time'] = $c->format('H:i a'); $data[] = $zone; $offset[] = $z->getOffset($c); $added[] = $zone['timezone_id']; } } } array_multisort($offset, SORT_ASC, $data); $options = array(); foreach ($data as $key => $row) { $options[$row['timezone_id']] = $row['time'] . ' - ' . formatOffset($row['offset']) . ' ' . $row['timezone_id']; } // now you can use $options; function formatOffset($offset) { $hours = $offset / 3600; $remainder = $offset % 3600; $sign = $hours > 0 ? '+' : '-'; $hour = (int) abs($hours); $minutes = (int) abs($remainder / 60); if ($hour == 0 AND $minutes == 0) { $sign = ' '; } return 'GMT' . $sign . str_pad($hour, 2, '0', STR_PAD_LEFT) .':'. str_pad($minutes,2, '0'); } 

ऐसा कुछ पैदा करता है:

 <option value="America/Boise" label="02:10 am - GMT-06:00 America/Boise">02:10 am - GMT-06:00 America/Boise</option> <option value="America/Denver" label="02:10 am - GMT-06:00 America/Denver">02:10 am - GMT-06:00 America/Denver</option> <option value="America/Edmonton" label="02:10 am - GMT-06:00 America/Edmonton">02:10 am - GMT-06:00 America/Edmonton</option> <option value="America/Inuvik" label="02:10 am - GMT-06:00 America/Inuvik">02:10 am - GMT-06:00 America/Inuvik</option> <option value="America/Shiprock" label="02:10 am - GMT-06:00 America/Shiprock">02:10 am - GMT-06:00 America/Shiprock</option> <option value="America/Belize" label="02:10 am - GMT-05:00 America/Belize">02:10 am - GMT-05:00 America/Belize</option> 

आशा है कि थोड़ी मदद करता है और / या आपको बेहतर कुछ के साथ आने के लिए प्रेरणा मिलती है

आप इस सरणी से एक ड्रॉपडाउन बहुत आसान बना सकते हैं (यह एक साथ काम करने और परीक्षण करने के लिए एक समय लेने वाला कार्य था)। हम पहले से ही हमारे कुछ ऐप्स में इस सूची का उपयोग करते हैं

डेलाइट सेविंग टाइम्स की वजह से, "जीएमटी + 2" जैसे टाइमज़न ऑफ़सेट न केवल आपके डाटाबेस में टाइमज़ोन आइडेंटिफ़ायर को स्टोर करना बहुत ज़रूरी है

अद्यतन करें

मैंने समयजानों की सूची अपडेट / सुधार दी (यह भी चेकआउट: https://github.com/paptamas/timezones ):

 <?php $timezones = array ( '(GMT-11:00) Midway Island' => 'Pacific/Midway', '(GMT-11:00) Samoa' => 'Pacific/Samoa', '(GMT-10:00) Hawaii' => 'Pacific/Honolulu', '(GMT-09:00) Alaska' => 'US/Alaska', '(GMT-08:00) Pacific Time (US &amp; Canada)' => 'America/Los_Angeles', '(GMT-08:00) Tijuana' => 'America/Tijuana', '(GMT-07:00) Arizona' => 'US/Arizona', '(GMT-07:00) Chihuahua' => 'America/Chihuahua', '(GMT-07:00) La Paz' => 'America/Chihuahua', '(GMT-07:00) Mazatlan' => 'America/Mazatlan', '(GMT-07:00) Mountain Time (US &amp; Canada)' => 'US/Mountain', '(GMT-06:00) Central America' => 'America/Managua', '(GMT-06:00) Central Time (US &amp; Canada)' => 'US/Central', '(GMT-06:00) Guadalajara' => 'America/Mexico_City', '(GMT-06:00) Mexico City' => 'America/Mexico_City', '(GMT-06:00) Monterrey' => 'America/Monterrey', '(GMT-06:00) Saskatchewan' => 'Canada/Saskatchewan', '(GMT-05:00) Bogota' => 'America/Bogota', '(GMT-05:00) Eastern Time (US &amp; Canada)' => 'US/Eastern', '(GMT-05:00) Indiana (East)' => 'US/East-Indiana', '(GMT-05:00) Lima' => 'America/Lima', '(GMT-05:00) Quito' => 'America/Bogota', '(GMT-04:00) Atlantic Time (Canada)' => 'Canada/Atlantic', '(GMT-04:30) Caracas' => 'America/Caracas', '(GMT-04:00) La Paz' => 'America/La_Paz', '(GMT-04:00) Santiago' => 'America/Santiago', '(GMT-03:30) Newfoundland' => 'Canada/Newfoundland', '(GMT-03:00) Brasilia' => 'America/Sao_Paulo', '(GMT-03:00) Buenos Aires' => 'America/Argentina/Buenos_Aires', '(GMT-03:00) Georgetown' => 'America/Argentina/Buenos_Aires', '(GMT-03:00) Greenland' => 'America/Godthab', '(GMT-02:00) Mid-Atlantic' => 'America/Noronha', '(GMT-01:00) Azores' => 'Atlantic/Azores', '(GMT-01:00) Cape Verde Is.' => 'Atlantic/Cape_Verde', '(GMT+00:00) Casablanca' => 'Africa/Casablanca', '(GMT+00:00) Edinburgh' => 'Europe/London', '(GMT+00:00) Greenwich Mean Time : Dublin' => 'Etc/Greenwich', '(GMT+00:00) Lisbon' => 'Europe/Lisbon', '(GMT+00:00) London' => 'Europe/London', '(GMT+00:00) Monrovia' => 'Africa/Monrovia', '(GMT+00:00) UTC' => 'UTC', '(GMT+01:00) Amsterdam' => 'Europe/Amsterdam', '(GMT+01:00) Belgrade' => 'Europe/Belgrade', '(GMT+01:00) Berlin' => 'Europe/Berlin', '(GMT+01:00) Bern' => 'Europe/Berlin', '(GMT+01:00) Bratislava' => 'Europe/Bratislava', '(GMT+01:00) Brussels' => 'Europe/Brussels', '(GMT+01:00) Budapest' => 'Europe/Budapest', '(GMT+01:00) Copenhagen' => 'Europe/Copenhagen', '(GMT+01:00) Ljubljana' => 'Europe/Ljubljana', '(GMT+01:00) Madrid' => 'Europe/Madrid', '(GMT+01:00) Paris' => 'Europe/Paris', '(GMT+01:00) Prague' => 'Europe/Prague', '(GMT+01:00) Rome' => 'Europe/Rome', '(GMT+01:00) Sarajevo' => 'Europe/Sarajevo', '(GMT+01:00) Skopje' => 'Europe/Skopje', '(GMT+01:00) Stockholm' => 'Europe/Stockholm', '(GMT+01:00) Vienna' => 'Europe/Vienna', '(GMT+01:00) Warsaw' => 'Europe/Warsaw', '(GMT+01:00) West Central Africa' => 'Africa/Lagos', '(GMT+01:00) Zagreb' => 'Europe/Zagreb', '(GMT+02:00) Athens' => 'Europe/Athens', '(GMT+02:00) Bucharest' => 'Europe/Bucharest', '(GMT+02:00) Cairo' => 'Africa/Cairo', '(GMT+02:00) Harare' => 'Africa/Harare', '(GMT+02:00) Helsinki' => 'Europe/Helsinki', '(GMT+02:00) Istanbul' => 'Europe/Istanbul', '(GMT+02:00) Jerusalem' => 'Asia/Jerusalem', '(GMT+02:00) Kyiv' => 'Europe/Helsinki', '(GMT+02:00) Pretoria' => 'Africa/Johannesburg', '(GMT+02:00) Riga' => 'Europe/Riga', '(GMT+02:00) Sofia' => 'Europe/Sofia', '(GMT+02:00) Tallinn' => 'Europe/Tallinn', '(GMT+02:00) Vilnius' => 'Europe/Vilnius', '(GMT+03:00) Baghdad' => 'Asia/Baghdad', '(GMT+03:00) Kuwait' => 'Asia/Kuwait', '(GMT+03:00) Minsk' => 'Europe/Minsk', '(GMT+03:00) Nairobi' => 'Africa/Nairobi', '(GMT+03:00) Riyadh' => 'Asia/Riyadh', '(GMT+03:00) Volgograd' => 'Europe/Volgograd', '(GMT+03:30) Tehran' => 'Asia/Tehran', '(GMT+04:00) Abu Dhabi' => 'Asia/Muscat', '(GMT+04:00) Baku' => 'Asia/Baku', '(GMT+04:00) Moscow' => 'Europe/Moscow', '(GMT+04:00) Muscat' => 'Asia/Muscat', '(GMT+04:00) St. Petersburg' => 'Europe/Moscow', '(GMT+04:00) Tbilisi' => 'Asia/Tbilisi', '(GMT+04:00) Yerevan' => 'Asia/Yerevan', '(GMT+04:30) Kabul' => 'Asia/Kabul', '(GMT+05:00) Islamabad' => 'Asia/Karachi', '(GMT+05:00) Karachi' => 'Asia/Karachi', '(GMT+05:00) Tashkent' => 'Asia/Tashkent', '(GMT+05:30) Chennai' => 'Asia/Calcutta', '(GMT+05:30) Kolkata' => 'Asia/Kolkata', '(GMT+05:30) Mumbai' => 'Asia/Calcutta', '(GMT+05:30) New Delhi' => 'Asia/Calcutta', '(GMT+05:30) Sri Jayawardenepura' => 'Asia/Calcutta', '(GMT+05:45) Kathmandu' => 'Asia/Katmandu', '(GMT+06:00) Almaty' => 'Asia/Almaty', '(GMT+06:00) Astana' => 'Asia/Dhaka', '(GMT+06:00) Dhaka' => 'Asia/Dhaka', '(GMT+06:00) Ekaterinburg' => 'Asia/Yekaterinburg', '(GMT+06:30) Rangoon' => 'Asia/Rangoon', '(GMT+07:00) Bangkok' => 'Asia/Bangkok', '(GMT+07:00) Hanoi' => 'Asia/Bangkok', '(GMT+07:00) Jakarta' => 'Asia/Jakarta', '(GMT+07:00) Novosibirsk' => 'Asia/Novosibirsk', '(GMT+08:00) Beijing' => 'Asia/Hong_Kong', '(GMT+08:00) Chongqing' => 'Asia/Chongqing', '(GMT+08:00) Hong Kong' => 'Asia/Hong_Kong', '(GMT+08:00) Krasnoyarsk' => 'Asia/Krasnoyarsk', '(GMT+08:00) Kuala Lumpur' => 'Asia/Kuala_Lumpur', '(GMT+08:00) Perth' => 'Australia/Perth', '(GMT+08:00) Singapore' => 'Asia/Singapore', '(GMT+08:00) Taipei' => 'Asia/Taipei', '(GMT+08:00) Ulaan Bataar' => 'Asia/Ulan_Bator', '(GMT+08:00) Urumqi' => 'Asia/Urumqi', '(GMT+09:00) Irkutsk' => 'Asia/Irkutsk', '(GMT+09:00) Osaka' => 'Asia/Tokyo', '(GMT+09:00) Sapporo' => 'Asia/Tokyo', '(GMT+09:00) Seoul' => 'Asia/Seoul', '(GMT+09:00) Tokyo' => 'Asia/Tokyo', '(GMT+09:30) Adelaide' => 'Australia/Adelaide', '(GMT+09:30) Darwin' => 'Australia/Darwin', '(GMT+10:00) Brisbane' => 'Australia/Brisbane', '(GMT+10:00) Canberra' => 'Australia/Canberra', '(GMT+10:00) Guam' => 'Pacific/Guam', '(GMT+10:00) Hobart' => 'Australia/Hobart', '(GMT+10:00) Melbourne' => 'Australia/Melbourne', '(GMT+10:00) Port Moresby' => 'Pacific/Port_Moresby', '(GMT+10:00) Sydney' => 'Australia/Sydney', '(GMT+10:00) Yakutsk' => 'Asia/Yakutsk', '(GMT+11:00) Vladivostok' => 'Asia/Vladivostok', '(GMT+12:00) Auckland' => 'Pacific/Auckland', '(GMT+12:00) Fiji' => 'Pacific/Fiji', '(GMT+12:00) International Date Line West' => 'Pacific/Kwajalein', '(GMT+12:00) Kamchatka' => 'Asia/Kamchatka', '(GMT+12:00) Magadan' => 'Asia/Magadan', '(GMT+12:00) Marshall Is.' => 'Pacific/Fiji', '(GMT+12:00) New Caledonia' => 'Asia/Magadan', '(GMT+12:00) Solomon Is.' => 'Asia/Magadan', '(GMT+12:00) Wellington' => 'Pacific/Auckland', '(GMT+13:00) Nuku\'alofa' => 'Pacific/Tongatapu' ); ?> 

सभी "अन्य" प्रविष्टियों को निकालने के लिए तामस का संपादन करना जो कि php.net साइट का अब उपयोग नहीं किया जाना चाहिए

शायद कोई फर्क नहीं पड़ता, लेकिन बस सर्वोत्तम प्रथाओं के बाद। निम्न के नोटिस देखें: http://fr2.php.net/manual/en/timezones.others.php

इसके अलावा, यद्यपि इस सूची में अज़ोरेस जीएमटी -1 है, वास्तव में मुझे लगता है कि यह एक ही है (कम से कम कभी कभी) जीएमटी के रूप में है, लेकिन यह निश्चित नहीं है।

एसक्यूएल में इसे प्रस्तुत करने के लिए संपादन ताकि आप किसी प्रपत्र में ड्रॉप डाउन सूची बना सकें और उपयोगकर्ता के उत्तर को एक सूचक से बद्ध किया जा सके।

प्रमुख स्थान को हटाने के लिए फिर से संपादन करना

 CREATE TABLE IF NOT EXISTS `timezones` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(44) DEFAULT NULL, `timezone` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=141 ; -- -- Dumping data for table `timezones` -- INSERT INTO `timezones` (`id`, `name`, `timezone`) VALUES (1, '(GMT-11:00) Midway Island ', 'Pacific/Midway'), (2, '(GMT-11:00) Samoa ', 'Pacific/Samoa'), (3, '(GMT-10:00) Hawaii ', 'Pacific/Honolulu'), (4, '(GMT-09:00) Alaska ', 'America/Anchorage'), (5, '(GMT-08:00) Pacific Time (US &amp; Canada) ', 'America/Los_Angeles'), (6, '(GMT-08:00) Tijuana ', 'America/Tijuana'), (7, '(GMT-07:00) Chihuahua ', 'America/Chihuahua'), (8, '(GMT-07:00) La Paz ', 'America/Chihuahua'), (9, '(GMT-07:00) Mazatlan ', 'America/Mazatlan'), (10, '(GMT-07:00) Mountain Time (US &amp; Canada) ', 'America/Denver'), (11, '(GMT-06:00) Central America ', 'America/Managua'), (12, '(GMT-06:00) Central Time (US &amp; Canada) ', 'America/Chicago'), (13, '(GMT-06:00) Guadalajara ', 'America/Mexico_City'), (14, '(GMT-06:00) Mexico City ', 'America/Mexico_City'), (15, '(GMT-06:00) Monterrey ', 'America/Monterrey'), (16, '(GMT-05:00) Bogota ', 'America/Bogota'), (17, '(GMT-05:00) Eastern Time (US &amp; Canada) ', 'America/New_York'), (18, '(GMT-05:00) Lima ', 'America/Lima'), (19, '(GMT-05:00) Quito ', 'America/Bogota'), (20, '(GMT-04:00) Atlantic Time (Canada) ', 'Canada/Atlantic'), (21, '(GMT-04:30) Caracas ', 'America/Caracas'), (22, '(GMT-04:00) La Paz ', 'America/La_Paz'), (23, '(GMT-04:00) Santiago ', 'America/Santiago'), (24, '(GMT-03:30) Newfoundland ', 'America/St_Johns'), (25, '(GMT-03:00) Brasilia ', 'America/Sao_Paulo'), (26, '(GMT-03:00) Buenos Aires ', 'America/Argentina/Buenos_Aires'), (27, '(GMT-03:00) Georgetown ', 'America/Argentina/Buenos_Aires'), (28, '(GMT-03:00) Greenland ', 'America/Godthab'), (29, '(GMT-02:00) Mid-Atlantic ', 'America/Noronha'), (30, '(GMT-01:00) Azores ', 'Atlantic/Azores'), (31, '(GMT-01:00) Cape Verde Is. ', 'Atlantic/Cape_Verde'), (32, '(GMT+00:00) Casablanca ', 'Africa/Casablanca'), (33, '(GMT+00:00) Edinburgh ', 'Europe/London'), (34, '(GMT+00:00) Dublin ', 'Europe/Dublin'), (35, '(GMT+00:00) Lisbon ', 'Europe/Lisbon'), (36, '(GMT+00:00) London ', 'Europe/London'), (37, '(GMT+00:00) Monrovia ', 'Africa/Monrovia'), (38, '(GMT+00:00) UTC ', 'UTC'), (39, '(GMT+01:00) Amsterdam ', 'Europe/Amsterdam'), (40, '(GMT+01:00) Belgrade ', 'Europe/Belgrade'), (41, '(GMT+01:00) Berlin ', 'Europe/Berlin'), (42, '(GMT+01:00) Bern ', 'Europe/Berlin'), (43, '(GMT+01:00) Bratislava ', 'Europe/Bratislava'), (44, '(GMT+01:00) Brussels ', 'Europe/Brussels'), (45, '(GMT+01:00) Budapest ', 'Europe/Budapest'), (46, '(GMT+01:00) Copenhagen ', 'Europe/Copenhagen'), (47, '(GMT+01:00) Ljubljana ', 'Europe/Ljubljana'), (48, '(GMT+01:00) Madrid ', 'Europe/Madrid'), (49, '(GMT+01:00) Paris ', 'Europe/Paris'), (50, '(GMT+01:00) Prague ', 'Europe/Prague'), (51, '(GMT+01:00) Rome ', 'Europe/Rome'), (52, '(GMT+01:00) Sarajevo ', 'Europe/Sarajevo'), (53, '(GMT+01:00) Skopje ', 'Europe/Skopje'), (54, '(GMT+01:00) Stockholm ', 'Europe/Stockholm'), (55, '(GMT+01:00) Vienna ', 'Europe/Vienna'), (56, '(GMT+01:00) Warsaw ', 'Europe/Warsaw'), (57, '(GMT+01:00) West Central Africa ', 'Africa/Lagos'), (58, '(GMT+01:00) Zagreb ', 'Europe/Zagreb'), (59, '(GMT+02:00) Athens ', 'Europe/Athens'), (60, '(GMT+02:00) Bucharest ', 'Europe/Bucharest'), (61, '(GMT+02:00) Cairo ', 'Africa/Cairo'), (62, '(GMT+02:00) Harare ', 'Africa/Harare'), (63, '(GMT+02:00) Helsinki ', 'Europe/Helsinki'), (64, '(GMT+02:00) Istanbul ', 'Europe/Istanbul'), (65, '(GMT+02:00) Jerusalem ', 'Asia/Jerusalem'), (66, '(GMT+02:00) Kyiv ', 'Europe/Helsinki'), (67, '(GMT+02:00) Pretoria ', 'Africa/Johannesburg'), (68, '(GMT+02:00) Riga ', 'Europe/Riga'), (69, '(GMT+02:00) Sofia ', 'Europe/Sofia'), (70, '(GMT+02:00) Tallinn ', 'Europe/Tallinn'), (71, '(GMT+02:00) Vilnius ', 'Europe/Vilnius'), (72, '(GMT+03:00) Baghdad ', 'Asia/Baghdad'), (73, '(GMT+03:00) Kuwait ', 'Asia/Kuwait'), (74, '(GMT+03:00) Minsk ', 'Europe/Minsk'), (75, '(GMT+03:00) Nairobi ', 'Africa/Nairobi'), (76, '(GMT+03:00) Riyadh ', 'Asia/Riyadh'), (77, '(GMT+03:00) Volgograd ', 'Europe/Volgograd'), (78, '(GMT+03:30) Tehran ', 'Asia/Tehran'), (79, '(GMT+04:00) Abu Dhabi ', 'Asia/Muscat'), (80, '(GMT+04:00) Baku ', 'Asia/Baku'), (81, '(GMT+04:00) Moscow ', 'Europe/Moscow'), (82, '(GMT+04:00) Muscat ', 'Asia/Muscat'), (83, '(GMT+04:00) St. Petersburg ', 'Europe/Moscow'), (84, '(GMT+04:00) Tbilisi ', 'Asia/Tbilisi'), (85, '(GMT+04:00) Yerevan ', 'Asia/Yerevan'), (86, '(GMT+04:30) Kabul ', 'Asia/Kabul'), (87, '(GMT+05:00) Islamabad ', 'Asia/Karachi'), (88, '(GMT+05:00) Karachi ', 'Asia/Karachi'), (89, '(GMT+05:00) Tashkent ', 'Asia/Tashkent'), (90, '(GMT+05:30) Chennai ', 'Asia/Calcutta'), (91, '(GMT+05:30) Kolkata ', 'Asia/Kolkata'), (92, '(GMT+05:30) Mumbai ', 'Asia/Calcutta'), (93, '(GMT+05:30) New Delhi ', 'Asia/Calcutta'), (94, '(GMT+05:30) Sri Jayawardenepura ', 'Asia/Calcutta'), (95, '(GMT+05:45) Kathmandu ', 'Asia/Katmandu'), (96, '(GMT+06:00) Almaty ', 'Asia/Almaty'), (97, '(GMT+06:00) Astana ', 'Asia/Dhaka'), (98, '(GMT+06:00) Dhaka ', 'Asia/Dhaka'), (99, '(GMT+06:00) Ekaterinburg ', 'Asia/Yekaterinburg'), (100, '(GMT+06:30) Rangoon ', 'Asia/Rangoon'), (101, '(GMT+07:00) Bangkok ', 'Asia/Bangkok'), (102, '(GMT+07:00) Hanoi ', 'Asia/Bangkok'), (103, '(GMT+07:00) Jakarta ', 'Asia/Jakarta'), (104, '(GMT+07:00) Novosibirsk ', 'Asia/Novosibirsk'), (105, '(GMT+08:00) Beijing ', 'Asia/Hong_Kong'), (106, '(GMT+08:00) Chongqing ', 'Asia/Chongqing'), (107, '(GMT+08:00) Hong Kong ', 'Asia/Hong_Kong'), (108, '(GMT+08:00) Krasnoyarsk ', 'Asia/Krasnoyarsk'), (109, '(GMT+08:00) Kuala Lumpur ', 'Asia/Kuala_Lumpur'), (110, '(GMT+08:00) Perth ', 'Australia/Perth'), (111, '(GMT+08:00) Singapore ', 'Asia/Singapore'), (112, '(GMT+08:00) Taipei ', 'Asia/Taipei'), (113, '(GMT+08:00) Ulaan Bataar ', 'Asia/Ulan_Bator'), (114, '(GMT+08:00) Urumqi ', 'Asia/Urumqi'), (115, '(GMT+09:00) Irkutsk ', 'Asia/Irkutsk'), (116, '(GMT+09:00) Osaka ', 'Asia/Tokyo'), (117, '(GMT+09:00) Sapporo ', 'Asia/Tokyo'), (118, '(GMT+09:00) Seoul ', 'Asia/Seoul'), (119, '(GMT+09:00) Tokyo ', 'Asia/Tokyo'), (120, '(GMT+09:30) Adelaide ', 'Australia/Adelaide'), (121, '(GMT+09:30) Darwin ', 'Australia/Darwin'), (122, '(GMT+10:00) Brisbane ', 'Australia/Brisbane'), (123, '(GMT+10:00) Canberra ', 'Australia/Canberra'), (124, '(GMT+10:00) Guam ', 'Pacific/Guam'), (125, '(GMT+10:00) Hobart ', 'Australia/Hobart'), (126, '(GMT+10:00) Melbourne ', 'Australia/Melbourne'), (127, '(GMT+10:00) Port Moresby ', 'Pacific/Port_Moresby'), (128, '(GMT+10:00) Sydney ', 'Australia/Sydney'), (129, '(GMT+10:00) Yakutsk ', 'Asia/Yakutsk'), (130, '(GMT+11:00) Vladivostok ', 'Asia/Vladivostok'), (131, '(GMT+12:00) Auckland ', 'Pacific/Auckland'), (132, '(GMT+12:00) Fiji ', 'Pacific/Fiji'), (133, '(GMT+12:00) International Date Line West ', 'Pacific/Kwajalein'), (134, '(GMT+12:00) Kamchatka ', 'Asia/Kamchatka'), (135, '(GMT+12:00) Magadan ', 'Asia/Magadan'), (136, '(GMT+12:00) Marshall Is. ', 'Pacific/Fiji'), (137, '(GMT+12:00) New Caledonia ', 'Asia/Magadan'), (138, '(GMT+12:00) Solomon Is. ', 'Asia/Magadan'), (139, '(GMT+12:00) Wellington ', 'Pacific/Auckland'), (140, '(GMT+13:00) Nuku\\alofa ', 'Pacific/Tongatapu'); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; 

Using listAbbreviations() makes no sense as for every area it returns all the different offsets that were historically used there, not just current ones. The right base source of the list is definitely listIdentifiers().

I would generate the list just once and save it to avoid generating it for every request. I could refresh it once a month.

Also, I could put all the timezones info into a separate js-script and generate the select list itself on the client side. The js-script could be cached as well, timezones don't change often.

Also, using javascript on the client side, you can know the current local time, and hence you can find the zones that have the same time now (minutes may differ, so comparison should be approximate), and display them on the top of the list, so the user does not have to scroll through all the 400 items. You can also display adjacent zones (+/-1 hour) following.

I know this has an answer already but I saw an opportunity to improve upon one of the answers here. Toland H posted some very good code that does exactly what the question was asking for. Below is a shortened and expand version of Toland H's code:

  • The function places everything in option tags for you. Just echo out whats return between your select tags.
  • Major Improvement: The list is sorted first by continent and organized in option groups based on continents. Makes it very user friendly for visitors picking their timezone.

 function generate_timezone_list() { static $allRegions = array( DateTimeZone::AFRICA, DateTimeZone::AMERICA, DateTimeZone::ANTARCTICA, DateTimeZone::ASIA, DateTimeZone::ATLANTIC, DateTimeZone::AUSTRALIA, DateTimeZone::EUROPE, DateTimeZone::INDIAN, DateTimeZone::PACIFIC ); // Makes it easier to create option groups next $list = array ('AFRICA','AMERICA','ANTARCTICA','ASIA','ATLANTIC','AUSTRALIA','EUROPE','INDIAN','PACIFIC'); // Make array holding the regions (continents), they are arrays w/ all their cities $region = array(); foreach ($allRegions as $area){ array_push ($region,DateTimeZone::listIdentifiers( $area )); } $count = count ($region); $i = 0; $holder = ''; // Go through each region one by one, sorting and formatting it's cities while ($i < $count){ $chunck = $region[$i]; // Create the region (continents) option group $holder .= '<optgroup label="---------- '.$list[$i].' ----------">'; $timezone_offsets = array(); foreach( $chunck as $timezone ){ $tz = new DateTimeZone($timezone); $timezone_offsets[$timezone] = $tz->getOffset(new DateTime); } asort ($timezone_offsets); $timezone_list = array(); foreach ($timezone_offsets as $timezone => $offset){ $offset_prefix = $offset < 0 ? '-' : '+'; $offset_formatted = gmdate( 'H:i', abs($offset) ); $pretty_offset = "UTC ${offset_prefix}${offset_formatted}"; $timezone_list[$timezone] = "(${pretty_offset}) $timezone"; } // All the formatting is done, finish and move on to next region foreach ($timezone_list as $key => $val){ $holder .= '<option value="'.$key.'">'.$val.'</option>'; } $holder .= '</optgroup>'; ++$i; } return $holder; } echo "<select>".generate_timezone_list()."</select>"; 

Then all you need to do is echo out what is returned between your html select tags. You'll get a select list something like this:

 ----- AFRICA ----- (UTC +00:00) Africa/ city name (UTC +01:00) Africa/ city name (UTC +02:00) Africa/ city name (UTC +02:00) Africa/ city name ----- AMERICA ----- (UTC -09:00) America/ city name (UTC -07:00) America/ city name (UTC +02:00) America/ city name (UTC +05:00) America/ city name 

और इसी तरह…

I wanted to have something simpler for my users, the way Google does it..

 $timezones = [ "AF" => [ "name" => "Afghanistan" ], "AL" => [ "name" => "Albania" ], "DZ" => [ "name" => "Algeria" ], "AS" => [ "name" => "American Samoa" ], "AD" => [ "name" => "Andorra" ], "AQ" => [ "name" => "Antarctica" ], "AG" => [ "name" => "Antigua & Barbuda" ], "AR" => [ "name" => "Argentina" ], "AM" => [ "name" => "Armenia" ], "AU" => [ "name" => "Australia" ], "AT" => [ "name" => "Austria" ], "AZ" => [ "name" => "Azerbaijan" ], "BS" => [ "name" => "Bahamas" ], "BD" => [ "name" => "Bangladesh" ], "BB" => [ "name" => "Barbados" ], "BY" => [ "name" => "Belarus" ], "BE" => [ "name" => "Belgium" ], "BZ" => [ "name" => "Belize" ], "BM" => [ "name" => "Bermuda" ], "BT" => [ "name" => "Bhutan" ], "BO" => [ "name" => "Bolivia" ], "BA" => [ "name" => "Bosnia & Herzegovina" ], "BR" => [ "name" => "Brazil" ], "IO" => [ "name" => "British Indian Ocean Territory" ], "BN" => [ "name" => "Brunei" ], "BG" => [ "name" => "Bulgaria" ], "CA" => [ "name" => "Canada" ], "CV" => [ "name" => "Cape Verde" ], "KY" => [ "name" => "Cayman Islands" ], "TD" => [ "name" => "Chad" ], "CL" => [ "name" => "Chile" ], "CN" => [ "name" => "China" ], "CX" => [ "name" => "Christmas Island" ], "CC" => [ "name" => "Cocos (Keeling) Islands" ], "CO" => [ "name" => "Colombia" ], "CK" => [ "name" => "Cook Islands" ], "CR" => [ "name" => "Costa Rica" ], "CI" => [ "name" => "Côte d'Ivoire" ], "HR" => [ "name" => "Croatia" ], "CU" => [ "name" => "Cuba" ], "CW" => [ "name" => "Curaçao" ], "CY" => [ "name" => "Cyprus" ], "CZ" => [ "name" => "Czech Republic" ], "DK" => [ "name" => "Denmark" ], "DO" => [ "name" => "Dominican Republic" ], "EC" => [ "name" => "Ecuador" ], "EG" => [ "name" => "Egypt" ], "SV" => [ "name" => "El Salvador" ], "EE" => [ "name" => "Estonia" ], "FK" => [ "name" => "Falkland Islands (Islas Malvinas)" ], "FO" => [ "name" => "Faroe Islands" ], "FJ" => [ "name" => "Fiji" ], "FI" => [ "name" => "Finland" ], "FR" => [ "name" => "France" ], "GF" => [ "name" => "French Guiana" ], "PF" => [ "name" => "French Polynesia" ], "TF" => [ "name" => "French Southern Territories" ], "GE" => [ "name" => "Georgia" ], "DE" => [ "name" => "Germany" ], "GH" => [ "name" => "Ghana" ], "GI" => [ "name" => "Gibraltar" ], "GR" => [ "name" => "Greece" ], "GL" => [ "name" => "Greenland" ], "GU" => [ "name" => "Guam" ], "GT" => [ "name" => "Guatemala" ], "GW" => [ "name" => "Guinea-Bissau" ], "GY" => [ "name" => "Guyana" ], "HT" => [ "name" => "Haiti" ], "HN" => [ "name" => "Honduras" ], "HK" => [ "name" => "Hong Kong" ], "HU" => [ "name" => "Hungary" ], "IS" => [ "name" => "Iceland" ], "IN" => [ "name" => "India" ], "ID" => [ "name" => "Indonesia" ], "IR" => [ "name" => "Iran" ], "IQ" => [ "name" => "Iraq" ], "IE" => [ "name" => "Ireland" ], "IL" => [ "name" => "Israel" ], "IT" => [ "name" => "Italy" ], "JM" => [ "name" => "Jamaica" ], "JP" => [ "name" => "Japan" ], "JO" => [ "name" => "Jordan" ], "KZ" => [ "name" => "Kazakhstan" ], "KE" => [ "name" => "Kenya" ], "KI" => [ "name" => "Kiribati" ], "KG" => [ "name" => "Kyrgyzstan" ], "LV" => [ "name" => "Latvia" ], "LB" => [ "name" => "Lebanon" ], "LR" => [ "name" => "Liberia" ], "LY" => [ "name" => "Libya" ], "LT" => [ "name" => "Lithuania" ], "LU" => [ "name" => "Luxembourg" ], "MO" => [ "name" => "Macau" ], "MK" => [ "name" => "Macedonia (FYROM)" ], "MY" => [ "name" => "Malaysia" ], "MV" => [ "name" => "Maldives" ], "MT" => [ "name" => "Malta" ], "MH" => [ "name" => "Marshall Islands" ], "MQ" => [ "name" => "Martinique" ], "MU" => [ "name" => "Mauritius" ], "MX" => [ "name" => "Mexico" ], "FM" => [ "name" => "Micronesia" ], "MD" => [ "name" => "Moldova" ], "MC" => [ "name" => "Monaco" ], "MN" => [ "name" => "Mongolia" ], "MA" => [ "name" => "Morocco" ], "MZ" => [ "name" => "Mozambique" ], "MM" => [ "name" => "Myanmar (Burma)" ], "NA" => [ "name" => "Namibia" ], "NR" => [ "name" => "Nauru" ], "NP" => [ "name" => "Nepal" ], "NL" => [ "name" => "Netherlands" ], "NC" => [ "name" => "New Caledonia" ], "NZ" => [ "name" => "New Zealand" ], "NI" => [ "name" => "Nicaragua" ], "NG" => [ "name" => "Nigeria" ], "NU" => [ "name" => "Niue" ], "NF" => [ "name" => "Norfolk Island" ], "KP" => [ "name" => "North Korea" ], "MP" => [ "name" => "Northern Mariana Islands" ], "NO" => [ "name" => "Norway" ], "PK" => [ "name" => "Pakistan" ], "PW" => [ "name" => "Palau" ], "PS" => [ "name" => "Palestine" ], "PA" => [ "name" => "Panama" ], "PG" => [ "name" => "Papua New Guinea" ], "PY" => [ "name" => "Paraguay" ], "PE" => [ "name" => "Peru" ], "PH" => [ "name" => "Philippines" ], "PN" => [ "name" => "Pitcairn Islands" ], "PL" => [ "name" => "Poland" ], "PT" => [ "name" => "Portugal" ], "PR" => [ "name" => "Puerto Rico" ], "QA" => [ "name" => "Qatar" ], "RE" => [ "name" => "Réunion" ], "RO" => [ "name" => "Romania" ], "RU" => [ "name" => "Russia" ], "WS" => [ "name" => "Samoa" ], "SM" => [ "name" => "San Marino" ], "SA" => [ "name" => "Saudi Arabia" ], "RS" => [ "name" => "Serbia" ], "SC" => [ "name" => "Seychelles" ], "SG" => [ "name" => "Singapore" ], "SK" => [ "name" => "Slovakia" ], "SI" => [ "name" => "Slovenia" ], "SB" => [ "name" => "Solomon Islands" ], "ZA" => [ "name" => "South Africa" ], "GS" => [ "name" => "South Georgia & South Sandwich Islands" ], "KR" => [ "name" => "South Korea" ], "ES" => [ "name" => "Spain" ], "LK" => [ "name" => "Sri Lanka" ], "PM" => [ "name" => "St. Pierre & Miquelon" ], "SD" => [ "name" => "Sudan" ], "SR" => [ "name" => "Suriname" ], "SJ" => [ "name" => "Svalbard & Jan Mayen" ], "SE" => [ "name" => "Sweden" ], "CH" => [ "name" => "Switzerland" ], "SY" => [ "name" => "Syria" ], "TW" => [ "name" => "Taiwan" ], "TJ" => [ "name" => "Tajikistan" ], "TH" => [ "name" => "Thailand" ], "TL" => [ "name" => "Timor-Leste" ], "TK" => [ "name" => "Tokelau" ], "TO" => [ "name" => "Tonga" ], "TT" => [ "name" => "Trinidad & Tobago" ], "TN" => [ "name" => "Tunisia" ], "TR" => [ "name" => "Turkey" ], "TM" => [ "name" => "Turkmenistan" ], "TC" => [ "name" => "Turks & Caicos Islands" ], "TV" => [ "name" => "Tuvalu" ], "UM" => [ "name" => "US Outlying Islands" ], "UA" => [ "name" => "Ukraine" ], "AE" => [ "name" => "United Arab Emirates" ], "GB" => [ "name" => "United Kingdom" ], "US" => [ "name" => "United States" ], "UY" => [ "name" => "Uruguay" ], "UZ" => [ "name" => "Uzbekistan" ], "VU" => [ "name" => "Vanuatu" ], "VA" => [ "name" => "Vatican City" ], "VE" => [ "name" => "Venezuela" ], "VN" => [ "name" => "Vietnam" ], "WF" => [ "name" => "Wallis & Futuna" ], "EH" => [ "name" => "Western Sahara" ], ]; // taken from Toland Hon's Answer function prettyOffset($offset) { $offset_prefix = $offset < 0 ? '-' : '+'; $offset_formatted = gmdate( 'H:i', abs($offset) ); $pretty_offset = "UTC${offset_prefix}${offset_formatted}"; return $pretty_offset; } foreach ($timezones as $k => $v) { $tz = DateTimeZone::listIdentifiers(DateTimeZone::PER_COUNTRY, $k); foreach ($tz as $value) { $t = new DateTimeZone($value); $offset = (new DateTime("now", $t))->getOffset(); $timezones[$k]['timezones'][$value] = prettyOffset($offset); } } 

This gives me an array grouped by countries:

 ["US"]=> array(2) { ["name"]=> string(13) "United States" ["timezones"]=> array(29) { ["America/Adak"]=> string(9) "UTC-10:00" ["America/Anchorage"]=> string(9) "UTC-09:00" ["America/Boise"]=> string(9) "UTC-07:00" ["America/Chicago"]=> string(9) "UTC-06:00" ["America/Denver"]=> string(9) "UTC-07:00" ["America/Detroit"]=> string(9) "UTC-05:00" ["America/Indiana/Indianapolis"]=> string(9) "UTC-05:00" ["America/Indiana/Knox"]=> string(9) "UTC-06:00" ["America/Indiana/Marengo"]=> string(9) "UTC-05:00" ["America/Indiana/Petersburg"]=> string(9) "UTC-05:00" ["America/Indiana/Tell_City"]=> string(9) "UTC-06:00" ["America/Indiana/Vevay"]=> string(9) "UTC-05:00" ["America/Indiana/Vincennes"]=> string(9) "UTC-05:00" ["America/Indiana/Winamac"]=> string(9) "UTC-05:00" ["America/Juneau"]=> string(9) "UTC-09:00" ["America/Kentucky/Louisville"]=> string(9) "UTC-05:00" ["America/Kentucky/Monticello"]=> string(9) "UTC-05:00" ["America/Los_Angeles"]=> string(9) "UTC-08:00" ["America/Menominee"]=> string(9) "UTC-06:00" ["America/Metlakatla"]=> string(9) "UTC-08:00" ["America/New_York"]=> string(9) "UTC-05:00" ["America/Nome"]=> string(9) "UTC-09:00" ["America/North_Dakota/Beulah"]=> string(9) "UTC-06:00" ["America/North_Dakota/Center"]=> string(9) "UTC-06:00" ["America/North_Dakota/New_Salem"]=> string(9) "UTC-06:00" ["America/Phoenix"]=> string(9) "UTC-07:00" ["America/Sitka"]=> string(9) "UTC-09:00" ["America/Yakutat"]=> string(9) "UTC-09:00" ["Pacific/Honolulu"]=> string(9) "UTC-10:00" } } 

Which means now I can do something like below (of course with some javaScript trickery): Google Analytics Timezone Settings

This PHP function do the Job for you an give back an array:

 function time_zonelist(){ $return = array(); $timezone_identifiers_list = timezone_identifiers_list(); foreach($timezone_identifiers_list as $timezone_identifier){ $date_time_zone = new DateTimeZone($timezone_identifier); $date_time = new DateTime('now', $date_time_zone); $hours = floor($date_time_zone->getOffset($date_time) / 3600); $mins = floor(($date_time_zone->getOffset($date_time) - ($hours*3600)) / 60); $hours = 'GMT' . ($hours < 0 ? $hours : '+'.$hours); $mins = ($mins > 0 ? $mins : '0'.$mins); $text = str_replace("_"," ",$timezone_identifier); $return[$timezone_identifier] = $text.' ('.$hours.':'.$mins.')'; } return $return; } 

This PHP function give back an array of all existing Timezones including Offset:

Use it eg like this:

 print_r(time_zonelist()); 

In some projects it really doesn't make sense to have the detailed timezones of Africa, Europe or Pacific. So here is a short version

 $timezoneTable = array( "-12" => "(GMT -12:00) Eniwetok, Kwajalein", "-11" => "(GMT -11:00) Midway Island, Samoa", "-10" => "(GMT -10:00) Hawaii", "-9" => "(GMT -9:00) Alaska", "-8" => "(GMT -8:00) Pacific Time (US &amp; Canada)", "-7" => "(GMT -7:00) Mountain Time (US &amp; Canada)", "-6" => "(GMT -6:00) Central Time (US &amp; Canada), Mexico City", "-5" => "(GMT -5:00) Eastern Time (US &amp; Canada), Bogota, Lima", "-4" => "(GMT -4:00) Atlantic Time (Canada), Caracas, La Paz", "-3.5" => "(GMT -3:30) Newfoundland", "-3" => "(GMT -3:00) Brazil, Buenos Aires, Georgetown", "-2" => "(GMT -2:00) Mid-Atlantic", "-1" => "(GMT -1:00) Azores, Cape Verde Islands", "0" => "(GMT) Western Europe Time, London, Lisbon, Casablanca", "1" => "(GMT +1:00) Brussels, Copenhagen, Madrid, Paris", "2" => "(GMT +2:00) Kaliningrad, South Africa", "3" => "(GMT +3:00) Baghdad, Riyadh, Moscow, St. Petersburg", "3.5" => "(GMT +3:30) Tehran", "4" => "(GMT +4:00) Abu Dhabi, Muscat, Baku, Tbilisi", "4.5" => "(GMT +4:30) Kabul", "5" => "(GMT +5:00) Ekaterinburg, Islamabad, Karachi, Tashkent", "5.5" => "(GMT +5:30) Bombay, Calcutta, Madras, New Delhi", "6" => "(GMT +6:00) Almaty, Dhaka, Colombo", "7" => "(GMT +7:00) Bangkok, Hanoi, Jakarta", "8" => "(GMT +8:00) Beijing, Perth, Singapore, Hong Kong", "9" => "(GMT +9:00) Tokyo, Seoul, Osaka, Sapporo, Yakutsk", "9.5" => "(GMT +9:30) Adelaide, Darwin", "10" => "(GMT +10:00) Eastern Australia, Guam, Vladivostok", "11" => "(GMT +11:00) Magadan, Solomon Islands, New Caledonia", "12" => "(GMT +12:00) Auckland, Wellington, Fiji, Kamchatka" ); echo "<select>"; foreach ($timezoneTable as $k => $v){ $sel = ($k==-5)?" selected":""; echo "<option value='".$k."'".$sel.">".$v."</option>"; } echo "</select>" 

this will generate a select as below:

यहां छवि विवरण दर्ज करें

the first option would allow you to take the value from $_POST['whateveryoucalltheselect'] and add it to UTC. or even store that value and then always call UTC + userTZsetting whenever you need it later. seems easiest to me. the last option would be much more valuable if timezones changed frequently.

None of them. Instead prepare an array in PHP with those timezones. पसंद

 $arr[0] = "(GMT+02:00) Harare, Pretoria"; $arr[1] = "(GMT+03:00) Jerusalem"; 

या

 $arr[0] = array("America/Campo_Grande", "(GMT+02:00) Harare, Pretoria"); $arr[1] = array("America/Israel", "(GMT+03:00) Jerusalem"); 

और इसी तरह। Then generate form based on this array:

 foreach ($arr as $k => $v) $str .= "<option value=$k>$v[1]</option>"; 

And then you may easily switch with different formats with just code modification in above line. Also validation will be much easier and don't require regular expressions. Just compare value sent by POST or GET with an array. Now it's easy to set $arr[$value_sent_by_form][0] holds PHP compatible value while $arr[$value_sent_by_form][1] user friendly value.

See this example also

 <?php function get_timezones() { $o = array(); $t_zones = timezone_identifiers_list(); foreach($t_zones as $a) { $t = ''; try { //this throws exception for 'US/Pacific-New' $zone = new DateTimeZone($a); $seconds = $zone->getOffset( new DateTime("now" , $zone) ); $hours = sprintf( "%+02d" , intval($seconds/3600)); $minutes = sprintf( "%02d" , ($seconds%3600)/60 ); $t = $a ." [ $hours:$minutes ]" ; $o[$a] = $t; } //exceptions must be catched, else a blank page catch(Exception $e) { //die("Exception : " . $e->getMessage() . '<br />'); //what to do in catch ? , nothing just relax } } ksort($o); return $o; } $o = get_timezones(); ?> <html> <body> <select name="time_zone"> <?php foreach($o as $tz => $label) { echo "<option value="$tz">$label</option>"; } ?> </select> </body> </html> 

After trying all solutions presented here and not being satisfied, I have found a script which is matching my needs and it is more user friendly. For the record, I will save it as a possible solution. I love the copy/paste solutions 🙂

Script returns a select with whatever timezone you want preselected.

यहां छवि विवरण दर्ज करें

Source: https://e-tel.eu/2011/07/13/create-a-time-zone-drop-down-list-ddl-in-php/

 <?php /** * returns a HTML formated TimeZone select * * PHP 5 >= 5.2.0 * * @param $selectedTimeZone string The timezone marked as "selected" * @return string */ function displayTimeZoneSelect($selectedTimeZone = 'America/New_York'){ $countryCodes = getCountryCodes(); $return = null; foreach ($countryCodes as $country => $countryCode) { $timezone_identifiers = DateTimeZone::listIdentifiers(DateTimeZone::PER_COUNTRY,$countryCode); foreach( $timezone_identifiers as $value ){ /* getTimeZoneOffset returns minutes and we need to display hours */ $offset = getTimeZoneOffset($value)/60; /* for the GMT+1 GMT-1 display */ $offset = ( substr($offset,0,1) == "-" ? " (GMT" : " (GMT+" ) . $offset . ")"; /* America/New_York -> America/New York */ $displayValue = (str_replace('_',' ',$value)); /* Find the city */ $ex = explode("/",$displayValue); $city = ( ($ex[2]) ? $ex[2] : $ex[1] ); /* For the special names */ $displayValue = htmlentities($country." - ".$city.$offset); /* handle the $selectedTimeZone in the select form */ $selected = ( ($value == $selectedTimeZone) ? ' selected="selected"' : null ); $return .= '<option value="' . $value . '"' . $selected . '>' . $displayValue . '</option>' . PHP_EOL; } } return $return; } /** * ISO 3166 code list * * @return array The country codes in 'COUNTRY' => 'CODE' format * @link http://www.iso.org/iso/iso_3166_code_lists ISO Website */ function getCountryCodes(){ $return = array( "AFGHANISTAN"=>"AF", "ALAND ISLANDS"=>"AX", "ALBANIA"=>"AL", "ALGERIA"=>"DZ", "AMERICAN SAMOA"=>"AS", "ANDORRA"=>"AD", "ANGOLA"=>"AO", "ANGUILLA"=>"AI", "ANTARCTICA"=>"AQ", "ANTIGUA AND BARBUDA"=>"AG", "ARGENTINA"=>"AR", "ARMENIA"=>"AM", "ARUBA"=>"AW", "AUSTRALIA"=>"AU", "AUSTRIA"=>"AT", "AZERBAIJAN"=>"AZ", "BAHAMAS"=>"BS", "BAHRAIN"=>"BH", "BANGLADESH"=>"BD", "BARBADOS"=>"BB", "BELARUS"=>"BY", "BELGIUM"=>"BE", "BELIZE"=>"BZ", "BENIN"=>"BJ", "BERMUDA"=>"BM", "BHUTAN"=>"BT", "BOLIVIA, PLURINATIONAL STATE OF"=>"BO", "BONAIRE, SINT EUSTATIUS AND SABA"=>"BQ", "BOSNIA AND HERZEGOVINA"=>"BA", "BOTSWANA"=>"BW", "BOUVET ISLAND"=>"BV", "BRAZIL"=>"BR", "BRITISH INDIAN OCEAN TERRITORY"=>"IO", "BRUNEI DARUSSALAM"=>"BN", "BULGARIA"=>"BG", "BURKINA FASO"=>"BF", "BURUNDI"=>"BI", "CAMBODIA"=>"KH", "CAMEROON"=>"CM", "CANADA"=>"CA", "CAPE VERDE"=>"CV", "CAYMAN ISLANDS"=>"KY", "CENTRAL AFRICAN REPUBLIC"=>"CF", "CHAD"=>"TD", "CHILE"=>"CL", "CHINA"=>"CN", "CHRISTMAS ISLAND"=>"CX", "COCOS (KEELING) ISLANDS"=>"CC", "COLOMBIA"=>"CO", "COMOROS"=>"KM", "CONGO"=>"CG", "CONGO, THE DEMOCRATIC REPUBLIC OF THE"=>"CD", "COOK ISLANDS"=>"CK", "COSTA RICA"=>"CR", "CÔTE D'IVOIRE"=>"CI", "CROATIA"=>"HR", "CUBA"=>"CU", "CURAÇAO"=>"CW", "CYPRUS"=>"CY", "CZECH REPUBLIC"=>"CZ", "DENMARK"=>"DK", "DJIBOUTI"=>"DJ", "DOMINICA"=>"DM", "DOMINICAN REPUBLIC"=>"DO", "ECUADOR"=>"EC", "EGYPT"=>"EG", "EL SALVADOR"=>"SV", "EQUATORIAL GUINEA"=>"GQ", "ERITREA"=>"ER", "ESTONIA"=>"EE", "ETHIOPIA"=>"ET", "FALKLAND ISLANDS (MALVINAS)"=>"FK", "FAROE ISLANDS"=>"FO", "FIJI"=>"FJ", "FINLAND"=>"FI", "FRANCE"=>"FR", "FRENCH GUIANA"=>"GF", "FRENCH POLYNESIA"=>"PF", "FRENCH SOUTHERN TERRITORIES"=>"TF", "GABON"=>"GA", "GAMBIA"=>"GM", "GEORGIA"=>"GE", "GERMANY"=>"DE", "GHANA"=>"GH", "GIBRALTAR"=>"GI", "GREECE"=>"GR", "GREENLAND"=>"GL", "GRENADA"=>"GD", "GUADELOUPE"=>"GP", "GUAM"=>"GU", "GUATEMALA"=>"GT", "GUERNSEY"=>"GG", "GUINEA"=>"GN", "GUINEA-BISSAU"=>"GW", "GUYANA"=>"GY", "HAITI"=>"HT", "HEARD ISLAND AND MCDONALD ISLANDS"=>"HM", "HOLY SEE (VATICAN CITY STATE)"=>"VA", "HONDURAS"=>"HN", "HONG KONG"=>"HK", "HUNGARY"=>"HU", "ICELAND"=>"IS", "INDIA"=>"IN", "INDONESIA"=>"ID", "IRAN, ISLAMIC REPUBLIC OF"=>"IR", "IRAQ"=>"IQ", "IRELAND"=>"IE", "ISLE OF MAN"=>"IM", "ISRAEL"=>"IL", "ITALY"=>"IT", "JAMAICA"=>"JM", "JAPAN"=>"JP", "JERSEY"=>"JE", "JORDAN"=>"JO", "KAZAKHSTAN"=>"KZ", "KENYA"=>"KE", "KIRIBATI"=>"KI", "KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF"=>"KP", "KOREA, REPUBLIC OF"=>"KR", "KUWAIT"=>"KW", "KYRGYZSTAN"=>"KG", "LAO PEOPLE'S DEMOCRATIC REPUBLIC"=>"LA", "LATVIA"=>"LV", "LEBANON"=>"LB", "LESOTHO"=>"LS", "LIBERIA"=>"LR", "LIBYAN ARAB JAMAHIRIYA"=>"LY", "LIECHTENSTEIN"=>"LI", "LITHUANIA"=>"LT", "LUXEMBOURG"=>"LU", "MACAO"=>"MO", "MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF"=>"MK", "MADAGASCAR"=>"MG", "MALAWI"=>"MW", "MALAYSIA"=>"MY", "MALDIVES"=>"MV", "MALI"=>"ML", "MALTA"=>"MT", "MARSHALL ISLANDS"=>"MH", "MARTINIQUE"=>"MQ", "MAURITANIA"=>"MR", "MAURITIUS"=>"MU", "MAYOTTE"=>"YT", "MEXICO"=>"MX", "MICRONESIA, FEDERATED STATES OF"=>"FM", "MOLDOVA, REPUBLIC OF"=>"MD", "MONACO"=>"MC", "MONGOLIA"=>"MN", "MONTENEGRO"=>"ME", "MONTSERRAT"=>"MS", "MOROCCO"=>"MA", "MOZAMBIQUE"=>"MZ", "MYANMAR"=>"MM", "NAMIBIA"=>"NA", "NAURU"=>"NR", "NEPAL"=>"NP", "NETHERLANDS"=>"NL", "NEW CALEDONIA"=>"NC", "NEW ZEALAND"=>"NZ", "NICARAGUA"=>"NI", "NIGER"=>"NE", "NIGERIA"=>"NG", "NIUE"=>"NU", "NORFOLK ISLAND"=>"NF", "NORTHERN MARIANA ISLANDS"=>"MP", "NORWAY"=>"NO", "OMAN"=>"OM", "PAKISTAN"=>"PK", "PALAU"=>"PW", "PALESTINIAN TERRITORY, OCCUPIED"=>"PS", "PANAMA"=>"PA", "PAPUA NEW GUINEA"=>"PG", "PARAGUAY"=>"PY", "PERU"=>"PE", "PHILIPPINES"=>"PH", "PITCAIRN"=>"PN", "POLAND"=>"PL", "PORTUGAL"=>"PT", "PUERTO RICO"=>"PR", "QATAR"=>"QA", "RÉUNION"=>"RE", "ROMANIA"=>"RO", "RUSSIAN FEDERATION"=>"RU", "RWANDA"=>"RW", "SAINT BARTHÉLEMY"=>"BL", "SAINT HELENA, ASCENSION AND TRISTAN DA CUNHA"=>"SH", "SAINT KITTS AND NEVIS"=>"KN", "SAINT LUCIA"=>"LC", "SAINT MARTIN (FRENCH PART)"=>"MF", "SAINT PIERRE AND MIQUELON"=>"PM", "SAINT VINCENT AND THE GRENADINES"=>"VC", "SAMOA"=>"WS", "SAN MARINO"=>"SM", "SAO TOME AND PRINCIPE"=>"ST", "SAUDI ARABIA"=>"SA", "SENEGAL"=>"SN", "SERBIA"=>"RS", "SEYCHELLES"=>"SC", "SIERRA LEONE"=>"SL", "SINGAPORE"=>"SG", "SINT MAARTEN (DUTCH PART)"=>"SX", "SLOVAKIA"=>"SK", "SLOVENIA"=>"SI", "SOLOMON ISLANDS"=>"SB", "SOMALIA"=>"SO", "SOUTH AFRICA"=>"ZA", "SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS"=>"GS", "SPAIN"=>"ES", "SRI LANKA"=>"LK", "SUDAN"=>"SD", "SURINAME"=>"SR", "SVALBARD AND JAN MAYEN"=>"SJ", "SWAZILAND"=>"SZ", "SWEDEN"=>"SE", "SWITZERLAND"=>"CH", "SYRIAN ARAB REPUBLIC"=>"SY", "TAIWAN, PROVINCE OF CHINA"=>"TW", "TAJIKISTAN"=>"TJ", "TANZANIA, UNITED REPUBLIC OF"=>"TZ", "THAILAND"=>"TH", "TIMOR-LESTE"=>"TL", "TOGO"=>"TG", "TOKELAU"=>"TK", "TONGA"=>"TO", "TRINIDAD AND TOBAGO"=>"TT", "TUNISIA"=>"TN", "TURKEY"=>"TR", "TURKMENISTAN"=>"TM", "TURKS AND CAICOS ISLANDS"=>"TC", "TUVALU"=>"TV", "UGANDA"=>"UG", "UKRAINE"=>"UA", "UNITED ARAB EMIRATES"=>"AE", "UNITED KINGDOM"=>"GB", "UNITED STATES"=>"US", "UNITED STATES MINOR OUTLYING ISLANDS"=>"UM", "URUGUAY"=>"UY", "UZBEKISTAN"=>"UZ", "VANUATU"=>"VU", "VENEZUELA, BOLIVARIAN REPUBLIC OF"=>"VE", "VIET NAM"=>"VN", "VIRGIN ISLANDS, BRITISH"=>"VG", "VIRGIN ISLANDS, US"=>"VI", "WALLIS AND FUTUNA"=>"WF", "WESTERN SAHARA"=>"EH", "YEMEN"=>"YE", "ZAMBIA"=>"ZM", "ZIMBABWE"=>"ZW"); return $return; } /** * Calculates the offset from UTC for a given timezone * * @return integer */ function getTimeZoneOffset($timeZone) { $dateTimeZoneUTC = new DateTimeZone("UTC"); $dateTimeZoneCurrent = new DateTimeZone($timeZone); $dateTimeUTC = new DateTime("now",$dateTimeZoneUTC); $dateTimeCurrent = new DateTime("now",$dateTimeZoneCurrent); $offset = (($dateTimeZoneCurrent->getOffset($dateTimeUTC))/60); return $offset; } ?> <label for="timeZone">Timezone<br /> <select id="timeZone" name="timeZone"> <?php echo displayTimeZoneSelect("America/Toronto");?> </select> </label> 

Here's one that creates a multidimensional array sorted by offset and niceified name:

 function timezones() { $timezones = []; foreach (timezone_identifiers_list() as $timezone) { $datetime = new \DateTime('now', new DateTimeZone($timezone)); $timezones[] = [ 'sort' => str_replace(':', '', $datetime->format('P')), 'offset' => $datetime->format('P'), 'name' => str_replace('_', ' ', implode(', ', explode('/', $timezone))), 'timezone' => $timezone, ]; } usort($timezones, function($a, $b) { return $a['sort'] - $b['sort'] ?: strcmp($a['name'], $b['name']); }); return $timezones; } foreach (timezones() as $timezone) { echo '(UTC '.$timezone['offset'].') '.$timezone['name'].'<br>'; } 

Echos:

 (UTC -11:00) Pacific, Midway (UTC -11:00) Pacific, Niue (UTC -11:00) Pacific, Pago Pago (UTC -10:00) Pacific, Honolulu (UTC -10:00) Pacific, Johnston (UTC -10:00) Pacific, Rarotonga (UTC -10:00) Pacific, Tahiti (UTC -09:30) Pacific, Marquesas (UTC -09:00) America, Adak (UTC -09:00) Pacific, Gambier (UTC -08:00) America, Anchorage (UTC -08:00) America, Juneau ... 
 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; } 

टाडा! 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