Quantcast
Channel: PHP Timezone List - Stack Overflow
Viewing all articles
Browse latest Browse all 15

PHP Timezone List

$
0
0

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?


Viewing all articles
Browse latest Browse all 15

Latest Images

Trending Articles





Latest Images