Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Symfony2 y la fecha 1969/04/27

14 de julio de 2015

Tengo un formulario como el siguiente.

// AppBundle\Form\TestType.php
//...
->add('fecha', null, array(
    'widget' => 'single_text'
))
//...

Al generar un CRUD todo me funciona perfecto. El problema está cuando trato de insertar un registro con fecha: 1969/04/27

Esto me está pasando con la versión 2.7.1 de Symfony. No he probado con otra.


Respuestas

#1

Buenas, ¿cuál problema estás teniendo exactamente? es decir, ¿cuál es el error que te muestra PHP?

@manuel_j555

14 julio 2015, 21:22
#2

El problema es simple. Sucede que cuando pongo la fecha 1969/04/27 me dice "This value is not valid". Acabo de probar con la versión 2.6 y me pasa lo mismo. He probado en tres proyectos de Symfony diferentes y al parecer es algo con el validador.

Eso sólo me sucede con esa fecha. Con cualquier otra todo funciona perfecto.

@sf_yasel

14 julio 2015, 21:31
#3

Prueba a especificar la opción format del campo de tipo date a ver si se soluciona el problema:

http://symfony.com/doc/current/reference/forms/types/date.html#format

->add('fecha', null, array(
    'widget' => 'single_text',
    'format' => 'yyyy/MM/dd'
))

Saludos!!!

@manuel_j555

14 julio 2015, 22:03
#4

Sigue sin funcionar. Trata de probarlo a ver si te da ese problema tambien.

@sf_yasel

14 julio 2015, 23:48
#5

¿Puedes probar cualquier otra fecha anterior al 1 de enero de 1970 para ver si también da error? ¿Puedes probar después con cualquier fecha posterior al 1 de enero de 1970 para ver si funciona bien?

También me gustaría saber quién está generando el mensaje "This value is not valid". ¿Puedes pasarnos algo de información de la traza de error que se muestra por pantalla?

@javiereguiluz

15 julio 2015, 8:50
#6

Gracias por la respuesta Javier. Me sucede sólo con esa fecha. Es un sistema que registra personas y sólo falla con una persona que nació en esa fecha 1969/04/27.

He generado otro proyecto de prueba y me da el mismo problema, incluso en servidores distintos y con versiones de Symfony distintas.

He revisado un poco en el núcleo de Symfony y algo extraño pasa.

//DateTimeToLocalizedStringTransformer.php
public function reverseTransform($value)
{
    if (!is_string($value)) {
        throw new TransformationFailedException('Expected a string.');
    }
 
    if ('' === $value) {
        return;
    }
 
    //en el caso de la fecha 1969/04/27 $timestamp me retorna false
    $timestamp = $this->getIntlDateFormatter()->parse($value);

El error en el profiler de formularios es:

Symfony\Component\Validator\ConstraintViolation
Object(Symfony\Component\Form\Form).children[fecha] = 1969/04/27
 
Caused by:
Symfony\Component\Form\Exception\TransformationFailedException
Unable to reverse value for property path "fecha": Date parsing failed: U_PARSE_ERROR
 
Caused by:
Symfony\Component\Form\Exception\TransformationFailedException
Date parsing failed: U_PARSE_ERROR

@sf_yasel

15 julio 2015, 14:56
#7

Un amigo stackoverflow en me respondió esto y realmente me funciona, lo que sólo para cuando la localización es inglés.

http://stackoverflow.com/questions/31418877/symfony2-and-1969-04-27-date/31432909#31432909

@sf_yasel

15 julio 2015, 16:23
#8

Acabo de hacer unas pruebas y me ha funcionado bien con 1969/04/27, y otras fechas.

Cuando me fallaba era cuando manejaba un formato diferente al indicado en la opción format.

Prueba a colocar el tipo de campo al crear el de la fecha:

->add('fecha', 'date', array(
    'widget' => 'single_text',
    'format' => 'yyyy/MM/dd'
))

Saludos!

@manuel_j555

15 julio 2015, 16:31