jueves, 3 de noviembre de 2016

PHP: Función strtotime

Un error que suele cometer mucha gente y en el que suele perder bastante tiempo buscando la solución es en la conversión de formatos de fechas.

Supongamos que nos encontramos en el siguiente escenario:
Tenemos un formulario, en el cual se encuentra un campo donde el usuario tiene que introducir la fecha de su nacimiento en el formato d/m/y:

<input type="text" name="fechaNac" id="fechaNac"/>

Lo que tenemos que hacer es convertir la cadena que hemos recuperado del formulario a un objeto de tipo Date para poder almacenarlo en la BD. La mayoría de gente podría pensar que se puede realizar de la siguiente manera:

//$nFechaNacimiento contiene la fecha de nacimiento
$date = date('Y-m-d', strtotime($nFechaNacimiento));
Y aquí está el problema. Al realizar la operación strtotime($nFechaNacimiento), se convierte la cadena que le pasamos como parámetro a una fecha UNIX. Como en la cadena hemos utilizado el separador "/", entiende que es una fecha con formato americano. Si por ejemplo, en el campo fecha de nacimiento habíamos introducido una fecha como 21/10/1982, se producirá un error y devolverá el valor "FALSE" porque entiende que el 21 corresponde al mes, el 10 al día y el 1982 al año. Además, al aplicar la función date('Y-m-d', FALSE) , devuelve la fecha 1970-01-01.

SOLUCIÓN: Para evitar esto, lo único que hay que hacer es un reemplazo en la cadena de fecha que pasamos como parámetro para sustituir el separador "/" por el "-". De este modo, la función strtotime entiende que se trata de una fecha con formato europeo y la conversión se realizará con éxito.

$date = date('Y-m-d', strtotime(str_replace('/', '-', $nFechaNacimiento)));
Fuentes: php.net

No hay comentarios:

Publicar un comentario