¿Por qué strtotime da un resultado diferente en una zona horaria diferente?

No estoy seguro de por qué strtotime() en PHP devuelve un resultado diferente en una zona horaria diferente a pesar de que se da la misma fecha como parámetro. ¿Alguien sabe la respuesta? También quiero saber, ¿puedo hacer una tarea similar (convertir un datetime en un int para realizar cálculos fácilmente) con otra función que da el mismo resultado en diferentes zonas horarias?

EDITAR:

Un ejemplo: si uso strtotime('2011-09-19 00:00:00') no debería devolver la diferencia entre 'January 1 1970 00:00:00' y '2011-09-19 00:00:00' en segundos? ¿Por qué la zona horaria es un problema aquí? ¿Y puedo obtener algo que da solo una diferencia sin problema de zona horaria?

En resumen: la zona horaria se considera porque el valor de la época de Unix se considera en GMT.

En un sentido más amplio, el 2011-09-19 00:00:00 llega a Bangladesh casi después de 6 horas, es el 2011-09-19 00:00:00 en la zona GMT. Debido a esta brecha, otros 21600 segundos han pasado en la zona GMT cuando aparece la misma fecha en BD.

Dado que el cálculo se realiza con respecto al GMT, debe agregar estos 21600 segundos para obtener la diferencia real.

strtotime da diferentes resultados en diferentes zonas horarias porque toma en cuenta las zonas horarias …

Del manual de strtotime :

La función espera recibir una cadena que contenga un formato de fecha en inglés e intentará analizar ese formato en una marca de tiempo de Unix (el número de segundos desde el 1 de enero de 1970 00:00:00 UTC)

Esta función utilizará la variable de entorno TZ (si está disponible) para calcular la marca de tiempo. Desde PHP 5.1.0, hay formas más fáciles de definir la zona horaria que se utiliza en todas las funciones de fecha / hora. Ese proceso se explica en la página de la función date_default_timezone_get() .

Echa un vistazo a mktime() .

Desde PHP 5.1, puede usar date_default_timezone_set antes de llamar a mktime o strtotime .

Del manual de PHP:

Esta función utilizará la variable de entorno TZ (si está disponible) para calcular la marca de tiempo. Desde PHP 5.1.0, hay formas más fáciles de definir la zona horaria que se utiliza en todas las funciones de fecha / hora. Ese proceso se explica en la página de la función date_default_timezone_get ().

http://php.net/manual/en/function.strtotime.php

Use date_default_timezone_set antes de llamar a las funciones de fecha / hora para elegir la zona horaria en la que desea trabajar.

http://www.php.net/manual/en/function.date-default-timezone-set.php

De documentos PHP en strtotime :

Esta función utilizará la variable de entorno TZ (si está disponible) para calcular la marca de tiempo. Desde PHP 5.1.0, hay formas más fáciles de definir la zona horaria que se utiliza en todas las funciones de fecha / hora. Ese proceso se explica en la página de la función date_default_timezone_get ().

Intenta establecer tu propia zona horaria .

Creo que probablemente habrá una vez en cada progtwigdor de PHP que esta función hará que quiera entender realmente cómo funciona realmente php con las funciones de fecha y hora.

Es gracioso esta función cuando intenta algo como … err … por ejemplo, suponga que hoy en este momento es el 11 de julio de 2012 a las 13:00:00 (2012-07-11 13:00:00) y luego intenta strtotime para encontrar exactamente el mismo momento del día pero para mañana:

 $x = strtotime('2012-07-12 13:00:00'); $y = strtotime('+1 Day'); $z = $x-$y; 

$ xy $ y de las primeras 2 líneas anteriores no devolverán lo mismo, incluso si ignora los recuentos de minutos y segundos, pero $ z será alrededor de 25200 o alrededor de 7 horas en la diferencia entre estas 2 líneas si su servidor se encuentra en algún lugar de los EE. UU. dicen que el GMT es de -5 horas, pero su navegador llama a esta función desde Berlín en verano, donde el GMT es de +2 horas … LOL, ahora puede tener una idea de cómo funciona php con esta función;)