Pregunta

Acabo de descubrir, ejecutando un script de calendario, que las marcas de tiempo en PHP tienen un límite de 2038. ¿Qué significa realmente?¿Por qué es 2038 en lugar de 2050 o 2039?¿Por qué un límite si las marcas de tiempo solo cuentan los segundos desde una fecha determinada (1970)?

¿Fue útil?

Solución

El límite lo imponen los números enteros de 4 bytes con signo que utilizan la mayoría de las bibliotecas de C para representar ese recuento.Matemáticas rápidas (asume 365 días de años, no exactamente correcto):

2147483648 seconds ~ 68.1 years

Esto también implica un límite inferior de ~ 1900.Algunas bibliotecas han comenzado a introducir recuentos de época de 64 bits, pero son pocas y distantes por el momento.

Otros consejos

El valor máximo de un entero de 32 bits es 2,147,483,647.Si agrega +1 a eso, obtiene -2,147,483,647.2,147,483,647 segundos desde 01-01-1970 00:00:00 es el 19 de enero de 2038. Si agrega un segundo más, obtendrá una fecha en algún lugar en 1902.

Supongo que se almacena en un número fijo de bits, lo que significa un límite en el tamaño que puede llegar a tener la marca de tiempo.Podríamos hacer algunos cálculos matemáticos para averiguarlo exactamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top