Pregunta

Estoy de la comprensión de que debido a la naturaleza de que PHP representa las fechas que usan milisegundos, no puede representar fechas más allá de 2038. Tengo un problema en el que quiero calcular las fechas lejos en el futuro. A miles de años de distancia.

Obviamente, no puedo usar la función de fecha PHP para representar esta fecha debido al límite, sin embargo, tengo algo de mi lado ... Todo lo que quiero hacer es almacenar el año, el mes y el día. No me importa la hora, el minuto, los segundos y los milisegundos.

¿Tengo razón al pensar que sin incluir esta información adicional debería poder calcular mucho más en el futuro porque estoy dispuesto a descartar mucha información? ¿Es esta una biblioteca que actualmente hace esto? Si no, ¿tiene algún consejo sobre cómo abordar este problema?

¿Fue útil?

Solución

Alternativamente, puedes usar el DateTime clase, que representa internamente los componentes de tiempo de forma independiente. Por lo tanto, no es susceptible a la limitación 2038 (a menos que use :: getTimestamp).

Otros consejos

pudo Use una plataforma de 64 bits.

El tamaño de un entero depende de la plataforma, aunque un valor máximo de aproximadamente dos mil millones es el valor habitual (eso es 32 bits firmados). Las plataformas de 64 bits generalmente tienen un valor máximo de aproximadamente 9e18.

Fuente.

Descubra que su plataforma tiene 64 bits con var_dump(PHP_INT_SIZE === 8). Si TRUE, su sistema tiene 64 bits.

PHP ha introducido Fecha y hora() Clase en la versión 5.2 para resolver este problema. Pero aún debe estar en un sistema operativo de 64 bits.

¡Olvida Windows! ¡Incluso si está ejecutando Apache de 64 bits a través de Windows de 64 bits!

$timestamp = strtotime('22-09-2508');
var_dump ($timestamp);
// returns bool false using WAMP 64-Bit over Windows 64 Bit

Si necesita calcular las marcas de tiempo, use un sistema de 64 bits (no Windows):

$timestamp = strtotime('22-09-2508');
var_dump ($timestamp);
// returns int 17000496000 using a LAMP Server

Puede ejecutar un servidor de lámparas usando VMware a través de sus Windows y lo más probable es que su servidor host final también use este servicio de 64 bits.

En otras palabras:

if (intval("9223372036854775807")==9223372036854775807) {
  // 64-bit
} else {
  // 32-bit
}

Entiendo ?

Nota: Time () y GetTimestamp () funcionan bien en el entorno de 64 bits (Linux) después del año 2038 ..

Tiene razón en que PHP no le permite manejar las fechas> 2038, de forma nativa. Sin embargo, hay bibliotecas como Éste Eso aprovecha el hecho de que los puntos flotantes son de 64 bits, lo que le permite evitar este problema si es necesario. (Todo bajo el supuesto de que está utilizando un sistema de 32 bits ... si está usando 64 bits, está bien).

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