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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.