diff --git a/src/applications/settings/controller/PhabricatorSettingsTimezoneController.php b/src/applications/settings/controller/PhabricatorSettingsTimezoneController.php --- a/src/applications/settings/controller/PhabricatorSettingsTimezoneController.php +++ b/src/applications/settings/controller/PhabricatorSettingsTimezoneController.php @@ -20,7 +20,8 @@ $zone = new DateTimeZone($identifier); $offset = -($zone->getOffset($now) / 60); if ($offset == $client_offset) { - $options[$identifier] = $identifier; + $name = PhabricatorTime::getTimezoneDisplayName($identifier); + $options[$identifier] = $name; } } diff --git a/src/applications/settings/setting/PhabricatorTimezoneSetting.php b/src/applications/settings/setting/PhabricatorTimezoneSetting.php --- a/src/applications/settings/setting/PhabricatorTimezoneSetting.php +++ b/src/applications/settings/setting/PhabricatorTimezoneSetting.php @@ -81,9 +81,16 @@ } sort($group); + + $group_map = array(); + foreach ($group as $identifier) { + $name = PhabricatorTime::getTimezoneDisplayName($identifier); + $group_map[$identifier] = $name; + } + $option_groups[] = array( 'label' => $label, - 'options' => array_fuse($group), + 'options' => $group_map, ); } diff --git a/src/infrastructure/time/PhabricatorTime.php b/src/infrastructure/time/PhabricatorTime.php --- a/src/infrastructure/time/PhabricatorTime.php +++ b/src/infrastructure/time/PhabricatorTime.php @@ -78,4 +78,14 @@ return $datetime; } + public static function getTimezoneDisplayName($raw_identifier) { + + // Internal identifiers have names like "America/Los_Angeles", but this is + // just an implementation detail and we can render them in a more human + // readable format with spaces. + $name = str_replace('_', ' ', $raw_identifier); + + return $name; + } + }