public function getTimezonesList()
{
if (!SettingsServer::isTimezoneSupportEnabled()) {
return array('UTC' => $this->getTimezonesListUTCOffsets());
}
$continents = array('Africa', 'America', 'Antarctica', 'Arctic', 'Asia', 'Atlantic', 'Australia', 'Europe', 'Indian', 'Pacific');
$timezones = timezone_identifiers_list();
$return = array();
foreach ($timezones as $timezone) {
// filter out timezones not recognized by strtotime()
// @see http://bugs.php.net/46111
$testDate = '2008-09-18 13:00:00 ' . $timezone;
if (!strtotime($testDate)) {
continue;
}
$timezoneExploded = explode('/', $timezone);
$continent = $timezoneExploded[0];
// only display timezones that are grouped by continent
if (!in_array($continent, $continents)) {
continue;
}
$city = $timezoneExploded[1];
if (!empty($timezoneExploded[2])) {
$city .= ' - ' . $timezoneExploded[2];
}
$city = str_replace('_', ' ', $city);
$return[$continent][$timezone] = $city;
}
foreach ($continents as $continent) {
if (!empty($return[$continent])) {
ksort($return[$continent]);
}
}
$return['UTC'] = $this->getTimezonesListUTCOffsets();
return $return;
}