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