Symfony 4.3: Aprimoramentos no Validador Timezone
O Symfony 4.3 irá adicionar um novo validador de fuso horário (Timezone) para verificar se o valor fornecido é um ID de timezone válido, conforme definido pelo PHP. Além desse validador, foi trabalhado em muitos outros recursos para melhorar o suporte a timezones.
Timezones adicionadas ao componente Intl
O componente Intl adicionou uma nova classe Timezone para obter informações sobre timezones, como seus nomes (em todos os idiomas):
use Symfony\Component\Intl\Timezones;
\Locale::setDefault('en');
$timezones = Timezones::getNames();
// ('timezoneID' => 'timezoneValue')
// => ['America/Eirunepe' => 'Acre Time (Eirunepe)', 'America/Rio_Branco' => 'Acre Time (Rio Branco)', ...]
$timezones = Timezones::getNames('de');
// => ['America/Eirunepe' => 'Acre-Zeit (Eirunepe)', 'America/Rio_Branco' => 'Acre-Zeit (Rio Branco)', ...]
$timezone = Timezones::getName('Africa/Nairobi');
// => 'East Africa Time (Nairobi)'
$timezone = Timezones::getName('Africa/Nairobi', 'de');
// => 'Ostafrikanische Zeit (Nairobi)'
Você também pode verificar se um determinado ID de timezone é válido:
$isValidTimezone = Timezones::exists($timezoneId);
Finalmente, você pode obter o deslocamento de timezone para qualquer timezone informada:
$offset = Timezones::getRawOffset('Etc/UTC'); // $offset = 0
$offset = Timezones::getRawOffset('America/Buenos_Aires'); // $offset = -10800
$offset = Timezones::getRawOffset('Asia/Katmandu'); // $offset = 20700
$offset = Timezones::getGmtOffset('Etc/UTC'); // $offset = 'GMT+00:00'
$offset = Timezones::getGmtOffset('America/Buenos_Aires'); // $offset = 'GMT-03:00'
$offset = Timezones::getGmtOffset('Asia/Katmandu'); // $offset = 'GMT+05:45'
Timezones Intl em TimezoneType
O elemento de formulário TimezoneType suporta tanto strings quanto PHP timezones em sua opção input
(que define o formato em que o fuso horário é armazenado em seu objeto subjacente). No Symfony 4.3 essa opção suporta um novo valor chamado intltimezone
para usar objetos\IntlTimeZone
para armazenar fusos horários.
Permitir timezones Intl no validador
O validador Timezone adicionado ao Symfony 4.3 foi melhorado para também considerar válidos ICU timezones, e não apenas PHP timezones. Além disso, a lista de ICU timezones foi atualizada para a versão 64.2. A única diferença é que fusos horários expirados não podem ser usados com IntlTimeZone
.
Na prática, isso considera válido tanto o UTC
(o formato PHP) quanto o Etc/UTC
(o formato ICU), enquanto o Etc/UTC
era considerado errado antes (o que não é).
Tradução dos nomes de timezones
Esse recurso solicitado há muito tempo irá finalmente ser adicionado no Symfony 4.3: a lista de nomes de fuso horário exibidos pelo TimeZoneType pode ser traduzida. Graças à nova opção choice_translation_locale
, você pode definir a localidade usada para traduzir os nomes de fuso horário antes de exibi-los ao usuário:
use Symfony\Component\Form\Extension\Core\Type\TimezoneType;
// ...
$builder->add('timezone', TimezoneType::class, [
// ...
'choice_translation_locale' => 'uk',
'intl' => true,
]);
No exemplo acima, os fusos horários serão exibidos em ucraniano (locale = uk
) em vez do inglês padrão, para que o usuário veja за центральноєвропейським часом (Амстердам)
em vez de Central European Time (Amsterdam)
.
Tradução de: New in Symfony 4.3: Timezone improvements