Nuevo en Symfony 4.3: Mejoras relacionadas con las zonas horarias
Symfony 4.3 incluye un nuevo validador de zonas horarias que comprueba que el valor pasado es uno de los identificadores válidos para zonas horarias definidos por PHP. Además de ese validador, Symfony 4.3 incluirá muchas otras novedades importantes relacionadas con las zonas horarias.
Soporte para traducir zonas horarias
El componente Intl ha añadido una nueva clase Timezone con la que puedes traducir los nombres de todas las zonas horarias a todos los idiomas del mundo:
use Symfony\Component\Intl\Timezones; // esto no hace falta hacerlo cuando usas este componente dentro de una // aplicación Symfony completa (el "locale" se establece automáticamente) \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)'
También puedes comprobar si una zona horaria existe:
$isValidTimezone = Timezones::exists($timezoneId);
También puedes obtener la diferencia horaria de cualquier zona horaria:
$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'
Debido al horario de verano la diferencia horaria de algunos países
depende del día, así que puedes pasar un segundo argumento a getRawOffset()
y
getGmtOffset()
para obtener la diferencia horaria en ese punto del tiempo:
// En 2019, el horario de verano de Madrid empieza el 31 de marzo y acaba el 27 de octubre Timezones::getRawOffset('Europe/Madrid', strtotime('March 31, 2019')); // $offset = 3600 Timezones::getRawOffset('Europe/Madrid', strtotime('April 1, 2019')); // $offset = 7200 Timezones::getGmtOffset('Europe/Madrid', strtotime('October 27, 2019')); // $offset = 'GMT+02:00' Timezones::getGmtOffset('Europe/Madrid', strtotime('October 28, 2019')); // $offset = 'GMT+01:00'
Zonas horarias en TimezoneType
El campo de formulario TimezoneType soporta tanto cadenas de texto como
zonas horarias de PHP en su opción input
(que define el formato con el que se
guarda la zona horaria en el objeto). En Symfony 4.3 hemos añadido un nuevo
formato llamado intltimezone
que usa objetos de tipo \IntlTimezone
para
almacenar esa información.
Nuevas zonas horarias en el validador
El validador Timezone también se ha actualizado para que soporte las nuevas zonas horarias de Intl y no solo las de PHP.
Traducción de los nombres de las zonas horarias
Esta funcionalidad tan deseada por toda la comunidad Symfony por fin se hará una
realidad en Symfony 4.3: la lista de zonas horarias del campo de formulario
TimezoneType
ahora se puede traducir. Gracias a la nueva opción
choice_translation_locale
, solo tienes que indicar el "locale" en el que
quieres mostrar las zonas horarias:
use Symfony\Component\Form\Extension\Core\Type\TimezoneType; // ... $builder->add('timezone', TimezoneType::class, [ // ... 'choice_translation_locale' => 'uk', 'intl' => true, ]);
En este ejemplo, el locale uk
se refiere al idioma ucraniano, por lo que en
vez de ver zonas horarias en inglés como Central European Time (Amsterdam)
, el
usuario verá cosas como за центральноєвропейським часом (Амстердам)
.
Esta funcionalidad fue contribuida por Roland Franssen en los pull requests #28831, #31295, #31262, #31195, #31318, #31292, #31294.
Fuente: New in Symfony 4.3: Timezone improvements
Comentarios
Proyectos Symfony destacados
La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más
Síguenos en @symfony_es para acceder a las últimas noticias.