Ver Mensaje Individual
  #4 (permalink)  
Antiguo 13/11/2011, 17:58
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: Fecha en formato Bigint

Retomo el tema para hacerte un par de aclaraciones sobre tu problema.
El formato de fecha UNIX TIMESTAMP adolece de un problema que afectará a los sistemas en el año 2038, y que se origina en que los contadores internos de los sistemas de 32 bits usan un entero con signo de 32 its para realizar los calculos. Esto hace que el mayor número representable positivo sea 2147483647, que corresponde a un INT. Cuando se supera ese valor se produce un desborde y el número no puede representar la fecha.

Este asunto generará un fallo el 19/01/2038 a las 03:14:07, que hará colapsar todo sistema que trabaje en 32 bits. No hay soluciones para eso, más que migrar todo el software a 64 bits.
Se estima que para la llegada de esa fecha el software en uso será todo de 64 bits.
¿Nunca te intrigó por qué se están fabricando ultimamente sólo PCs de 64 bits...?
Bueno, esa es una de las razones fundamentales.

Como sea, el problema que tienes no es tal, es simplemente que estás tratando de manipular los datos con el rango incorrecto de enteros, o bien esos datos no son UNIXTIME reales, sino otra cosa.

Esto último se hace especialmente evidente cuando haces la conversión inversa: Ver qué numero le corresponde a la fecha que dices debería tener:
Código MySQL:
Ver original
  1. mysql> SELECT UNIX_TIMESTAMP('2011-11-10 10:53:45');
  2. +---------------------------------------+
  3. | UNIX_TIMESTAMP('2011-11-10 10:53:45') |
  4. +---------------------------------------+
  5. |                            1320933225 |
  6. +---------------------------------------+
  7. 1 row in set (0.00 sec)
Como puedes ver, a la fecha 10/11/2011 10:53:45 le corresponde el 1320933225 y no el 129653924254880000.
Código MySQL:
Ver original
  1. mysql> SELECT UNIX_TIMESTAMP('2011-11-10 11:05:09');
  2. +---------------------------------------+
  3. | UNIX_TIMESTAMP('2011-11-10 11:05:09') |
  4. +---------------------------------------+
  5. |                            1320933909 |
  6. +---------------------------------------+
  7. 1 row in set (0.00 sec)
Y a la fecha 10/11/2011 11:05:09 le corresponde 1320933909 y no 129653931093710000.

En otras palabras: Lo que crees que es, no es lo que realmente es... y ni siquiera se le parece.

Te sugiero que analices la fuente de datos y verifiques qué es lo que realmente está almacenando y cómo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 13/11/2011 a las 18:12