Personalizar campo time de formulario, formato de 24h a AM/PM en symfony2

2,622 views
Skip to first unread message

INHack20

unread,
Jul 17, 2012, 7:52:54 PM7/17/12
to symfony-es
Amigos he leído la documentación del tipo de dato time y no he
encontrado la solución, para cambiar el formato de la fecha que se
reproduce el widget en el formulario a AM/PM, sigue saliendo con la
hora desde 0..23 y minutos 0..59, la verdad es que no es nada
atractivo este formato por eso he estado buscando alguna información
con esto y ya que no he conseguido de verdad les pido que me echen una
manito.

Necesito básicamente es que al reproducir mi formulario en el cual
deseo capturar las horas, me salga en formato 12 Horas AM/PM

Esta es mi clase.

class HorarioType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('dias')
->add('horaInicio','time',array(
'input' => 'datetime',
'widget' => 'choice',
))
->add('horaFin','time',array(
'input' => 'datetime',
'widget' => 'choice',
))
->add('emite')
->add('grupos','entity',array(
'class' => 'INHack20\\ControlDistribucionBundle\\Entity
\\Grupo',
'property' => 'nombre',
'empty_value' => 'Seleccione',
))
;
}

Gracias de ante mano al que te tome el tiempo de ayudarme.

Carlos Zuniga

unread,
Jul 17, 2012, 9:14:35 PM7/17/12
to symfo...@googlegroups.com

INHack20

unread,
Jul 17, 2012, 10:40:37 PM7/17/12
to symfony-es

Hermano gracias por tu respuesta, pero eso no me funciona ya lo he
intentado, coloco 'date_format' => 'h:mm a' y no me reconoce ese
formato, solo me reconoce si le coloco formato a la fecha
'date_format' => 'd-M-y', o hay algo que estoy haciendo mal o es algun
bug con la version de Symfony 2.0.16, ya me ha pasado antes con la
version 2.0.13 tuve problemas con el tipo Collection.

De verdad te agradeceria si me pudieras ayudar.

Carlos Zuniga

unread,
Jul 18, 2012, 10:56:10 AM7/18/12
to symfo...@googlegroups.com
2012/7/17 INHack20 <inha...@gmail.com>:
Pensé que funcionaría si usabas algo como 'date_format' =>
IntlDateFormatter::LONG, pero viendo el codigo de TimeType [0], parece
que no tiene soporte para usar am/pm.

Podrías hacer dos cosas:

1) Crear un campo personalizado [1], basicamente hacer copia de
TimeType y del DateTimeToArrayTransformer[2] y añadir el widget para
am/pm y la transformación de un array a un DateTime y viceversa.

2) añadir los 3 campos por separado (hora, minuto, am/pm) en tu
formulario con la opción `'property_path' => false` y luego
convertirlos en un DateTime manualmente en tu controlador (los
obtienes del formulario con `$form->get('hora')->getData();`).

Creo que la segunda opción es más fácil pero a la larga va a hacer que
tengas que escribir más código.

Saludos

[0] https://github.com/symfony/symfony/blob/v2.0.16/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php
[1] http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html
[2] https://github.com/symfony/symfony/blob/v2.0.16/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToArrayTransformer.php
[3] http://symfony.com/doc/current/cookbook/form/data_transformers.html

--
A menudo unas pocas horas de "Prueba y error" podrán ahorrarte minutos
de leer manuales.

INHack20

unread,
Jul 18, 2012, 10:26:44 PM7/18/12
to symfony-es

Ok hermano gracias por tu aporte, vere cual metodo implemento.

helysm

unread,
Jul 20, 2012, 4:59:06 PM7/20/12
to symfo...@googlegroups.com

Colega eso lo puedes solucionar facil con jquery, hay un plugin que te permite desplegar un calendario con hora ademas de poderlo modificar a tu gusto. De esa manera lo puedes haacer mucho mas facil y elegante para el usuario.

El jul 18, 2012 9:26 p.m., "INHack20" <inha...@gmail.com> escribió:


Ok hermano gracias por tu aporte, vere cual metodo implemento.


--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Google Groups.
Para pu...

Reply all
Reply to author
Forward
0 new messages