2012-02-05 6 views
5

Tengo tres servidores, haciendo lo siguiente en los tres servidores:¿Qué causaría que el tiempo de inactividad de php no funcione para una fecha en 2099?

echo strtotime('2099-12-31'); 
echo strtotime(date('Y-m-d')); 

me obtiene:

Servidor # 1: (PHP 5.3.8, 64 bits)

4102376400 
1328418000 

servidor 2 : (php 5.3.2, 32 bits)

**[nothing]** 
1328418000 

Servidor # 3: (php 5.3.2 - 64 bits Creí que era t ser un problema de versión de php)

4102376400 
1328418000 

¿Qué causaría strtotime falle en uno de los servidores, pero no los demás? Los tres tienen la misma configuración predeterminada de zona horaria y fecha.tiempo en php.ini (no estoy seguro de si eso tendría un efecto o no). También encendí errores y no estoy viendo nada.

+3

¿El servidor 2 es de 32 bits? –

+2

Bueno, supongo que la fecha es lo suficientemente grande como para estar fuera de la época Unix de 32 bits (cualquier fecha 2038 o posterior). ¿Podría ser una cosa de 32 bit vs de 64 bit? –

+3

uno de sus servidores toma en cuenta la profecía maya. – dqhendricks

Respuesta

9

Probablemente es un problema de 32 bits. Funciona muy bien en mi servidor de 64 bits, pero mi 32 bits de Ubuntu devuelve falso en strtotime('2099-12-31')

Para más información ver esta nota en el manual (destacando por mí):

El rango válido de una marca de tiempo es típicamente de viernes, 13 de diciembre de 1901 20:45:54 UTC a martes, 19 de enero de 2038, 03:14:07 UTC. (Estas son las fechas que corresponden a los valores mínimo y máximo para un entero de 32 bits con signo.) Además, no todas las plataformas admiten marcas de tiempo negativas, por lo tanto, su intervalo de fechas puede limitarse a no antes de la época de Unix. Esto significa que, p. las fechas anteriores al 1 de enero de 1970 no funcionarán en Windows, algunas distribuciones de Linux y algunos otros sistemas operativos. PHP 5.1.0 y versiones más nuevas superan esta limitación.

Para las versiones de 64 bits de PHP, el rango válido de una marca de tiempo es efectivamente infinito, ya que 64 bits pueden representar aproximadamente 293 mil millones de años en cualquier dirección.

+4

El manual de PHP es muy tonto. Hay una ** gran ** diferencia entre 293 mil millones e infinito. –

+3

Ahí es donde entra "efectivamente". – ceejayoz

+1

El único efecto que tiene es hacerme temblar y escribir estos comentarios. –

2

Según el docs:

El rango válido de una marca de tiempo es típicamente de Vier 13 Dic 1901 20:45:54 GMT a mar 19 Ene 2038 03:14:07 GMT. (Estas son las fechas que corresponden a los valores mínimo y máximo para un entero de 32 bits con signo.) Además, no todas las plataformas admiten marcas de tiempo negativas, por lo tanto, su intervalo de fechas puede limitarse a no antes de la época de Unix. Esto significa que, p. las fechas anteriores al 1 de enero de 1970 no funcionarán en Windows, algunas distribuciones de Linux y algunos otros sistemas operativos. PHP 5.1.0 y versiones más nuevas superan esta limitación.

Para las versiones de 64 bits de PHP, el rango válido de una marca de tiempo es efectivamente infinito, ya que 64 bits pueden representar aproximadamente 293 mil millones de años en cualquier dirección.

Pruebe por ejemplo 2019-12-31, debería funcionar como se esperaba.

Cuestiones relacionadas