Re: [PHP-ES] Formatear fechas para guardar en base de datos
[email protected] (Philipp Keweloh)
| Newsgroups | php.general.es |
|---|---|
| Message-ID | <[email protected]> |
El 25 de noviembre de 2009 17:16, Rolan Benavent <[email protected]>escribió: > Agustín Macías escribió: > > Hola, >> No tengo el nivel de muchos de los que hay por aquí, pero ando >> aprendiendo, >> y en este momento me he quedado bloqueado con una cosa que quizás sea >> básica, pero no soy capaz de encontrar la solución. >> Se trata de formatear una fecha que recibo de un formulario para guardarla >> en la base de datos como "*datetime*". Del formulario recibo el año, el >> mes, el día y la hora. Y lo proceso de la siguiente manera: >> >> *$hora=$hora-1;* >> *$date="$annus-$mes-$dia-$hora";* >> *$tDate=strtotime($date);* >> *$dateparainsert=date("Y-m-d H",$tDate);* >> >> El problema que tengo, es que *primero*, no se si hay alguna forma más >> simple de hacerlo, y *segundo*, es que si no le resto "*1*" a "*$hora*", >> me >> guarda la fecha con una hora de más, pero al restarle "*1*", no consigo >> guardar fechas con la hora de media noche "00:00". >> >> Muchas gracias a todos, y espero me podáis orientar para encontrar la >> solución. >> >> >> > Hola Agustín, > viendo tu código, no entiendo muy bien por qué usas un "-" para separar en > $date la fecha de la hora, es decir, en vez de: > > > $date = "$annus-$mes-$dia-$hora"; > > por qué no pones: > > > $date = "$annus-$mes-$dia $hora"; > > De todos modos, ya que tienes separados todos los valores que componen la > fecha, en vez de la función strtotime(), yo usaria mktime(): > > // http://es2.php.net/manual/en/function.mktime.php > > $date = mktime($hora, 0, 0, $mes, $dia, $annus); > > Saludos, > > Rolan Benavent. > > -- > PHP Spanish Localization Talk Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > Yo también te recomiendo que siempre que puedas utiliza mktime() antes que strtotime(), ya que la primera es mucho más segura. Dependiendo de la configuración horaria strtotime() te puede dar resultados inesperados. A ver si te sirve esto: $tDate=mktime($hora, 0, 0, $mes, $dia, $annus); $dateparainsert=date ("Y-m-d H:i:s",$tDate); // El formato correcto para un DATETIME de MySQL es así Seguramente deberás ajustar la variable hora para que no incluya minutos y segundos, o bien completas el mktime() con ellos. Un saludo. -- Philipp Keweloh "Las huellas de las personas que caminaron juntas nunca se borran." Proverbio del Congo