2011-07-27 21 views
5

En primer lugar, esto no es una pregunta acerca de cómo solucionar un problema porque mi fecha está emitiendo 1969.PHP date() sólo desde 1970 - 2038

Ésta es una pregunta acerca de por qué el tiempo no existe antes de 1970 o después de 2038 al usar date().

He intentado seaching SO y Google, pero todo lo que convierte a las personas se producen errores al utilizar date() forma incorrecta, lo que resulta en la salida familiar de December 31, 1969 5:00 pm

¿Alguien sabe por qué no puede ir antes de 1970? ¿Deberíamos dejar de usar date() ya que será inutilizable después de 2038? ¿Cuál es la historia sobre esto? ¿Cuál es el trabajo para trabajar con fechas fuera de este rango?

+0

número de segundos en un int desde la medianoche 1/1/1970, y creo que es 2038 ... –

+0

http: // en.wikipedia.org/wiki/Unix_time –

+0

¡Error de la época! http://xkcd.com/376/ –

Respuesta

4

Es 2038 problema

y buscar, I'm in year 1653

+0

Muy bien, pero tratando de usar 'strtotime' en cualquier cosa menor que UTC no generará un resultado negativo. ¿Hay alguna manera de arreglar eso? –

+0

@imoda: It [does] (http://sandbox.phpcode.eu/g/07bb0.php) funciona para mí – genesis

+0

¿Qué versión de PHP es esa? http://codepad.org/SGCTgt1V –

4

Esto se explica en la PHP manual page para date():

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 con signo de 32 bits).

El hecho de que usted está recibiendo 31 de de diciembre de, 1969 significa que es muy probable que suministra una timestamp parámetro extraño date(), lo que resulta en una fecha que no es lo que esperas. Como @Mitch Wheat dijo en su comentario, esto se relaciona con el tiempo de Unix ya que es relativo desde el 1 de enero de 1970.

3

Compare el número 2^31 y el número de segundos entre las dos fechas.

Cuestiones relacionadas