Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problema con el almacenamiento de la fecha (hora)

Estas en el tema de Problema con el almacenamiento de la fecha (hora) en el foro de Mysql en Foros del Web. Buenas, después de rebuscar por el foro no encuentro la forma de solucionar el tema, la cosa es que es un código de pago y ...
  #1 (permalink)  
Antiguo 13/01/2011, 09:08
 
Fecha de Ingreso: enero-2011
Mensajes: 11
Antigüedad: 13 años, 3 meses
Puntos: 0
Exclamación Problema con el almacenamiento de la fecha (hora)

Buenas, después de rebuscar por el foro no encuentro la forma de solucionar el tema, la cosa es que es un código de pago y no tengo acceso al PHP de la web, pero si puedo trabajar con la mysql, el problema que tengo es con el almacenamiento del campo hora (time), hay veces que se me almacena bien y otras en otro formato y no se si es de la configuracion del PHP o se puede arreglar de alguna forma..

Cuando me aparece correcta en la web es cuando se almacena por ejemplo en este formato: 1294929017
Cuando me aparece de manera incorrecta en la web es curiosamente cuando se almacena en este formato: 15:30:52

Tengo otro campo asociado que es la fecha del dia del registro y esta aparece bien en el SQL es decir al lado tengo 2011-01-13; pero cuando aparece mal la hora este campo siempre muestra en la web la misma fecha 01-01-70

Se agradece la ayuda, los de la web no se lo explican...
  #2 (permalink)  
Antiguo 13/01/2011, 10:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con el almacenamiento de la fecha (hora)

Es muy probable que se estén usando en la aplicación funciones d conversión de fecha en formato UNIXTIME, ya que ese formato almacena el valor como un entero y luego deben usarse funciones específicas para convertirlo:
Código MySQL:
Ver original
  1. mysql> SELECT FROM_UNIXTIME(1294929017);
  2. +---------------------------+
  3. | FROM_UNIXTIME(1294929017) |
  4. +---------------------------+
  5. | 2011-01-13 11:30:17       |
  6. +---------------------------+
  7. 1 row in set (0.00 sec)
En cambio, si la fecha se pone como un datetime normal, lo que sucedería sería:
Código MySQL:
Ver original
  1. mysql> SELECT FROM_UNIXTIME('2011-01-13 11:30:17');
  2. +--------------------------------------+
  3. | FROM_UNIXTIME('2011-01-13 11:30:17') |
  4. +--------------------------------------+
  5. | 1969-12-31 21:33:31                  |
  6. +--------------------------------------+
  7. 1 row in set, 1 warning (0.00 sec)
Como puedes ver, una cadena representando la fecha se interpreta incorrectamente, y un entero no.
Eso es simplemente porque el formato UNIXTIME almacena la fecha como un entero que representa la cantidad de segundos desde '1970-01-01 00:00:00' GMT.

Tu problema es en este caso que si no puedes acceder al PHP, debes tener en cuenta que e formato de fechas no es el que usas normalmente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 13/01/2011, 11:54
 
Fecha de Ingreso: enero-2011
Mensajes: 11
Antigüedad: 13 años, 3 meses
Puntos: 0
Exclamación Respuesta: Problema con el almacenamiento de la fecha (hora)

Gracias, entiendo el problema, efectivamente debe tener una función que esta haciendome la vida imposible... entonces si no accedo al php no me queda otra opcion que dejar esto mal en la web no?? lo de la fecha que me comentas en el panel de administrador de la web me deja seleccionar tanto la zona horaria como el formato de la fecha, tengo exactamente la misma configuracion que otro compañero con el mismo tipo de web y a el si que le funciona bien, vamos que cuando se genera un registro en el sql le aparece la fecha correcta, a mi en cambio se me genera un registro siempre con la fecha a 01-01-70, no es cuestion de cambiar nada en la configuración de las tablas?? Gracias por la ayuda que me estas dando.
  #4 (permalink)  
Antiguo 13/01/2011, 12:04
 
Fecha de Ingreso: enero-2011
Mensajes: 11
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Problema con el almacenamiento de la fecha (hora)

Aqui te dejo dos capturas por si sirven de algo:

  #5 (permalink)  
Antiguo 13/01/2011, 12:32
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con el almacenamiento de la fecha (hora)

Para mi es evidente que esa tabla tiene el problema de que ese campo no debería ser VARCHAR sino BIGINT UNSIGNED. No sólo porque de esa forma sólo necesitas 8 Bytes y no 25 para el dato, sino que evitas que metan datos incorrectos, como es en tu caso.
Además, también está mal poner '18:33:49', porque si están usando una función FROM_UNIXTIME() para leer el dato, esta función no es un TIME sino un DATETIME, por lo que para que sea válido debes poner el valor en segundos desde el 01/01/1970 hasta el momento del elemento a guardar. Lo que tienes que hacer, entonces, es guardar el dato con la función UNIX_TIMESTAMP(fecha) para obtener el valor correcto. Al hacerlo así se da que:
Código MySQL:
Ver original
  1. mysql> SELECT UNIX_TIMESTAMP('2011-01-13 18:33:49');
  2. +---------------------------------------+
  3. | UNIX_TIMESTAMP('2011-01-13 18:33:49') |
  4. +---------------------------------------+
  5. |                            1294954429 |
  6. +---------------------------------------+
  7. 1 row in set (0.00 sec)
Como puedes ver, no es '18:33:49' lo que debes guardar, sino 1294954429
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 13/01/2011, 15:46
 
Fecha de Ingreso: enero-2011
Mensajes: 11
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Problema con el almacenamiento de la fecha (hora)

Gracias por la ayuda, he cambiado esos parametros en ese campo y cuando se hace un registro nuevo se almacena un valor "20" con lo que en el panel del cliente se sigue mostrando mal la fecha... estas son las capturas, la del error es una prueba que he hecho para que veais como se envia ya erroneamente el dato mal a la tabla, es como si fuera el script que graba la información el que esta mal....




  #7 (permalink)  
Antiguo 13/01/2011, 18:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con el almacenamiento de la fecha (hora)

No estás entendiendo. El dato a guardar no puede ser la conversión en segundos de un día. Debe ser la cantidad de segundos desde el 01/01/1970 00:00:00.
¿Se entiende?
Lo que sucede es que ese campo está guardando un DATETIME en formato UNIX, pero el PHP está tomando solamente la parte de la hora de ese datetime para representar en la aplicación.

Si guardas el numero 20, como si fueran 20 minutos o 20 horas, en realidad estás guardando la fecha "01/01/1970 00:00:20".

¿Se comprende?

Lo que tu no puedes resolver, a menos que puedas editar los PHP y corregirlos, es que las consultas en esos scripts deben tener embebido código SQL que trata de procesar ese dato como FROM_UNIXTIME.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 14/01/2011, 02:35
 
Fecha de Ingreso: enero-2011
Mensajes: 11
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Problema con el almacenamiento de la fecha (hora)

Entendido, se lo remito a los programadores, gracias por las perfectas aclaraciones sobre este tema.

Etiquetas: almacenamiento, fechas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:00.