Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP Timezone List

Tags:

timezone

php

time

I am looking for a way to generate a list of timezones for display in a <select> Generating a drop down list of timezones with PHP

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

When I checked my country, the offset was wrong, I am in Asia/Singapore, it should be UTC/GMT +8 http://www.timeanddate.com/worldclock/city.html?n=236 but according to the generated list its +9. Is there some kind of logic error? The time was correct tho

Is there a better way to generate this list? from the same question in the link above,

static $regions = array(     'Africa' => DateTimeZone::AFRICA,     'America' => DateTimeZone::AMERICA,     'Antarctica' => DateTimeZone::ANTARCTICA,     'Aisa' => DateTimeZone::ASIA,     'Atlantic' => DateTimeZone::ATLANTIC,     'Europe' => DateTimeZone::EUROPE,     'Indian' => DateTimeZone::INDIAN,     'Pacific' => DateTimeZone::PACIFIC ); foreach ($regions as $name => $mask) {     $tzlist[] = DateTimeZone::listIdentifiers($mask); } 

This just gets the identifiers I want a friendly display name eg. UTC+8 Asia/Singapore or something similar. How can I get that?

like image 517
Jiew Meng Avatar asked Jan 21 '11 05:01

Jiew Meng


People also ask

What timezone does PHP use?

The default timezone for PHP is UTC regardless of your server's timezone. This is the timezone used by all PHP date/time functions in your scripts.

How can I get timezone in PHP?

The date_default_timezone_get() function returns the default timezone used by all date/time functions in the script.


1 Answers

Take my array of time zones, which I made specially for select element. It is associated array where key is PHP time zone and value is human representation. This is it:

$timezones = array(     'Pacific/Midway'       => "(GMT-11:00) Midway Island",     'US/Samoa'             => "(GMT-11:00) Samoa",     'US/Hawaii'            => "(GMT-10:00) Hawaii",     'US/Alaska'            => "(GMT-09:00) Alaska",     'US/Pacific'           => "(GMT-08:00) Pacific Time (US &amp; Canada)",     'America/Tijuana'      => "(GMT-08:00) Tijuana",     'US/Arizona'           => "(GMT-07:00) Arizona",     'US/Mountain'          => "(GMT-07:00) Mountain Time (US &amp; Canada)",     'America/Chihuahua'    => "(GMT-07:00) Chihuahua",     'America/Mazatlan'     => "(GMT-07:00) Mazatlan",     'America/Mexico_City'  => "(GMT-06:00) Mexico City",     'America/Monterrey'    => "(GMT-06:00) Monterrey",     'Canada/Saskatchewan'  => "(GMT-06:00) Saskatchewan",     'US/Central'           => "(GMT-06:00) Central Time (US &amp; Canada)",     'US/Eastern'           => "(GMT-05:00) Eastern Time (US &amp; Canada)",     'US/East-Indiana'      => "(GMT-05:00) Indiana (East)",     'America/Bogota'       => "(GMT-05:00) Bogota",     'America/Lima'         => "(GMT-05:00) Lima",     'America/Caracas'      => "(GMT-04:30) Caracas",     'Canada/Atlantic'      => "(GMT-04:00) Atlantic Time (Canada)",     'America/La_Paz'       => "(GMT-04:00) La Paz",     'America/Santiago'     => "(GMT-04:00) Santiago",     'Canada/Newfoundland'  => "(GMT-03:30) Newfoundland",     'America/Buenos_Aires' => "(GMT-03:00) Buenos Aires",     'Greenland'            => "(GMT-03:00) Greenland",     'Atlantic/Stanley'     => "(GMT-02:00) Stanley",     'Atlantic/Azores'      => "(GMT-01:00) Azores",     'Atlantic/Cape_Verde'  => "(GMT-01:00) Cape Verde Is.",     'Africa/Casablanca'    => "(GMT) Casablanca",     'Europe/Dublin'        => "(GMT) Dublin",     'Europe/Lisbon'        => "(GMT) Lisbon",     'Europe/London'        => "(GMT) London",     'Africa/Monrovia'      => "(GMT) Monrovia",     'Europe/Amsterdam'     => "(GMT+01:00) Amsterdam",     'Europe/Belgrade'      => "(GMT+01:00) Belgrade",     'Europe/Berlin'        => "(GMT+01:00) Berlin",     'Europe/Bratislava'    => "(GMT+01:00) Bratislava",     'Europe/Brussels'      => "(GMT+01:00) Brussels",     'Europe/Budapest'      => "(GMT+01:00) Budapest",     'Europe/Copenhagen'    => "(GMT+01:00) Copenhagen",     'Europe/Ljubljana'     => "(GMT+01:00) Ljubljana",     'Europe/Madrid'        => "(GMT+01:00) Madrid",     'Europe/Paris'         => "(GMT+01:00) Paris",     'Europe/Prague'        => "(GMT+01:00) Prague",     'Europe/Rome'          => "(GMT+01:00) Rome",     'Europe/Sarajevo'      => "(GMT+01:00) Sarajevo",     'Europe/Skopje'        => "(GMT+01:00) Skopje",     'Europe/Stockholm'     => "(GMT+01:00) Stockholm",     'Europe/Vienna'        => "(GMT+01:00) Vienna",     'Europe/Warsaw'        => "(GMT+01:00) Warsaw",     'Europe/Zagreb'        => "(GMT+01:00) Zagreb",     'Europe/Athens'        => "(GMT+02:00) Athens",     'Europe/Bucharest'     => "(GMT+02:00) Bucharest",     'Africa/Cairo'         => "(GMT+02:00) Cairo",     'Africa/Harare'        => "(GMT+02:00) Harare",     'Europe/Helsinki'      => "(GMT+02:00) Helsinki",     'Europe/Istanbul'      => "(GMT+02:00) Istanbul",     'Asia/Jerusalem'       => "(GMT+02:00) Jerusalem",     'Europe/Kiev'          => "(GMT+02:00) Kyiv",     'Europe/Minsk'         => "(GMT+02:00) Minsk",     'Europe/Riga'          => "(GMT+02:00) Riga",     'Europe/Sofia'         => "(GMT+02:00) Sofia",     'Europe/Tallinn'       => "(GMT+02:00) Tallinn",     'Europe/Vilnius'       => "(GMT+02:00) Vilnius",     'Asia/Baghdad'         => "(GMT+03:00) Baghdad",     'Asia/Kuwait'          => "(GMT+03:00) Kuwait",     'Africa/Nairobi'       => "(GMT+03:00) Nairobi",     'Asia/Riyadh'          => "(GMT+03:00) Riyadh",     'Europe/Moscow'        => "(GMT+03:00) Moscow",     'Asia/Tehran'          => "(GMT+03:30) Tehran",     'Asia/Baku'            => "(GMT+04:00) Baku",     'Europe/Volgograd'     => "(GMT+04:00) Volgograd",     'Asia/Muscat'          => "(GMT+04:00) Muscat",     'Asia/Tbilisi'         => "(GMT+04:00) Tbilisi",     'Asia/Yerevan'         => "(GMT+04:00) Yerevan",     'Asia/Kabul'           => "(GMT+04:30) Kabul",     'Asia/Karachi'         => "(GMT+05:00) Karachi",     'Asia/Tashkent'        => "(GMT+05:00) Tashkent",     'Asia/Kolkata'         => "(GMT+05:30) Kolkata",     'Asia/Kathmandu'       => "(GMT+05:45) Kathmandu",     'Asia/Yekaterinburg'   => "(GMT+06:00) Ekaterinburg",     'Asia/Almaty'          => "(GMT+06:00) Almaty",     'Asia/Dhaka'           => "(GMT+06:00) Dhaka",     'Asia/Novosibirsk'     => "(GMT+07:00) Novosibirsk",     'Asia/Bangkok'         => "(GMT+07:00) Bangkok",     'Asia/Jakarta'         => "(GMT+07:00) Jakarta",     'Asia/Krasnoyarsk'     => "(GMT+08:00) Krasnoyarsk",     'Asia/Chongqing'       => "(GMT+08:00) Chongqing",     'Asia/Hong_Kong'       => "(GMT+08:00) Hong Kong",     'Asia/Kuala_Lumpur'    => "(GMT+08:00) Kuala Lumpur",     'Australia/Perth'      => "(GMT+08:00) Perth",     'Asia/Singapore'       => "(GMT+08:00) Singapore",     'Asia/Taipei'          => "(GMT+08:00) Taipei",     'Asia/Ulaanbaatar'     => "(GMT+08:00) Ulaan Bataar",     'Asia/Urumqi'          => "(GMT+08:00) Urumqi",     'Asia/Irkutsk'         => "(GMT+09:00) Irkutsk",     'Asia/Seoul'           => "(GMT+09:00) Seoul",     'Asia/Tokyo'           => "(GMT+09:00) Tokyo",     'Australia/Adelaide'   => "(GMT+09:30) Adelaide",     'Australia/Darwin'     => "(GMT+09:30) Darwin",     'Asia/Yakutsk'         => "(GMT+10:00) Yakutsk",     'Australia/Brisbane'   => "(GMT+10:00) Brisbane",     'Australia/Canberra'   => "(GMT+10:00) Canberra",     'Pacific/Guam'         => "(GMT+10:00) Guam",     'Australia/Hobart'     => "(GMT+10:00) Hobart",     'Australia/Melbourne'  => "(GMT+10:00) Melbourne",     'Pacific/Port_Moresby' => "(GMT+10:00) Port Moresby",     'Australia/Sydney'     => "(GMT+10:00) Sydney",     'Asia/Vladivostok'     => "(GMT+11:00) Vladivostok",     'Asia/Magadan'         => "(GMT+12:00) Magadan",     'Pacific/Auckland'     => "(GMT+12:00) Auckland",     'Pacific/Fiji'         => "(GMT+12:00) Fiji", ); 
like image 165
Eugene Manuilov Avatar answered Sep 19 '22 18:09

Eugene Manuilov