As you can see inside the Timezone Type, Symfony get the timezone this way:
private static function getFlippedTimezones()
{
if (null === self::$timezones) {
self::$timezones = array();
foreach (\DateTimeZone::listIdentifiers() as $timezone) {
$parts = explode('/', $timezone);
if (count($parts) > 2) {
$region = $parts[0];
$name = $parts[1].' - '.$parts[2];
} elseif (count($parts) > 1) {
$region = $parts[0];
$name = $parts[1];
} else {
$region = 'Other';
$name = $parts[0];
}
self::$timezones[$region][str_replace('_', ' ', $name)] = $timezone;
}
}
return self::$timezones;
}
You could create your own type or use it inside the form like
$choices = self::getCustomFlippedTimezones();
$builder
->add('timeZone', ChoiceType::class, array(
'choices' => $choices
))
For reusability:
// src/AppBundle/Form/Type/CustomTimeZoneType.php
namespace AppBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
class CustomTimeZoneType extends AbstractType
{
private static function getFlippedTimezones() { /*[...]*/}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'choices' => self::getCustomFlippedTimezones(),
'choices_as_values' => true,
));
}
public function getParent()
{
return ChoiceType::class;
}
}