Fechas Negativas?... Fecha EPOCH, Fecha PHP y FECHA UNIX TimeStamp de MySQL » Chasqui Market ©
REGÍSTRATE AQUÍ
Pueblo Libre es la red de Seguridad Ciudadana para todos los vecinos de Pueblo Libre iniciando Enero 2,019.

Es toda una confusión que cuando le agarras la onda, pues todo funciona facilito. Aqui les paso un truco que me ha servido para guardar fechas de nacimiento y hacer cálculos complejos como fechas entre edades exactas y otros trucos más. Pongan mucha atención!! es un tanto complejo... Adjunto todos los ejemplos para poder enterderlo perfectamente. Saludos

¿Qué es el tiempo EPOCH?

La época Unix (EPOCH UNIX) (o tiempo Unix o el tiempo POSIX o marca de tiempo Unix) es el número de segundos que han transcurrido desde el 1 de Enero 1970 (medianoche UTC / GMT), sin contar los segundos de salto (en la norma ISO 8601: 1970-01-01T00: 00 : 00Z). Literalmente hablando es el tiempo Unix 0 (medianoche 01/01/1970). El término EPOCH se utiliza a menudo como sinónimo de "tiempo Unix '. Muchas fechas de sistemas Unix almacenan Epoch como un entero de 32 bits con signo, que puede provocar problemas el 19 de enero, 2038 (conocido como el problema del año 2038 o Y2038).

Entonces que sucede cuando queremos guardar fechas anteriores al 1ero de Enero de 1970? Bueno.. Se ha creado los EPOCHs o Épocas negativas. Antes de esto existia un gran problema con MySQL ya que este, no puede convertir las marcas de tiempo época negativos (fechas antes del 01/01/1970). Esto crea problemas con, por ejemplo, fechas de nacimiento. Pero hay soluciones.

Por ejemplo, los cumplaños antes de 1970 se guardan en un numero negativo de referencia, con intervalos conocidos, es decir

# converting to MySQL date:
SELECT DATE_ADD(FROM_UNIXTIME(0), interval -315619200 second);
# converting your epoch to a date string:
SELECT DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), interval -315619200 second),'%Y-%m-%d');

Es decir se calcula con un truco, agregando una constante, correspondiente a los segundos de un numero constante preferentemente un multiplo de 4. Esta constante, traduce el tiempo restando el numero de años escogido. Por ejemplo tomamos 40 años.

De esta forma determinamos la constante y es asi como se resta ese intervalo de los numeros que son menores a 1970 y obtienes un numero EPOCH NEGATIVO y al cual puedes guardar en tu base de datos MySQL


MySQL [files]> select adddate(from_unixtime(0), interval 40 year);
+---------------------------------------------+
| adddate(from_unixtime(0), interval 40 year) |
+---------------------------------------------+
| 2010-01-01 01:00:00 |
+---------------------------------------------+
1 row in set (0.09 sec)

MySQL [files]> select unix_timestamp(adddate(from_unixtime(0), interval 40 year));
+------------------------------------------------------ -------+
| unix_timestamp(adddate(from_unixtime(0), interval 40 year)) |
+------------------------------------------------------ -------+
| 1262304000 |
+------------------------------------------------------ -------+
1 row in set (0.09 sec)
Now you can every unix timestamp x between 1930 and 20xx and use it.

select subdate(from_unixtime(x+1262304000), interval 40 year);
With your example -769338000, you get

MySQL [files]> select subdate(from_unixtime(-769338000+1262304000), interval 40 year);
+------------------------------------------------------ -----------+
| subdate(from_unixtime(-769338000+1262304000), interval 40 year) |
+------------------------------------------------------ -----------+
| 1945-08-15 17:00:00 |
+------------------------------------------------------ -----------+
1 row in set (0.09 sec)
Last update on Diciembre 9, 2:14 am by Lucho Cabrejo.
Archivos Adjuntos
El tiempo está en GMT. En estos momentos son las 7:16 pm.
TOP