gmdate - php timestamp to date
¿PHP time() devuelve una marca de tiempo GMT/UTC? (4)
Desde PHP 5.1.0 (cuando se reescribieron las funciones de fecha / hora), cada llamada a una función de fecha / hora generará un E_NOTICE si la zona horaria no es válida y / o un mensaje E_WARNING si usa la configuración del sistema o la TZ. Variable ambiental.
Por lo tanto, para obtener una marca de tiempo UTC debe verificar cuál es la zona horaria actual y trabajar con eso o simplemente usar:
$utc_str = gmdate("M d Y H:i:s", time());
$utc = strtotime($utc_str);
Solo quiero verificar si time()
devuelve una marca de tiempo UTC / GMT o si necesito usar date_default_timezone_set()
?
Devuelve la hora actual medida en la cantidad de segundos desde la Época Unix (1 de enero de 1970 00:00:00 GMT).
"Devuelve la hora actual medida en la cantidad de segundos desde la Época Unix (1 de enero de 1970 00:00:00 GMT)".
Entonces creo que la respuesta a su pregunta es sí.
time
devuelve una marca de tiempo UNIX, que es independiente de la zona horaria. Como una marca de tiempo UNIX indica los segundos desde 1970 UTC, se podría decir que es UTC, pero realmente no tiene zona horaria.
Para ser realmente claro, una marca de tiempo UNIX tiene el mismo valor en todo el mundo en cualquier momento dado. En el momento de escribir esto, es 1296096875
en Tokio, Londres y Nueva York. Para convertir esto en un tiempo "legible para humanos", debe especificar en qué zona horaria desea que se muestre. 1296096875
en Tokio es 2011-01-27 11:54:35
, en Londres es 2011-01-27 02:54:35
y en Nueva York es 2011-01-26 21:54:35
.
En efecto, generalmente se trata de (una combinación de) estos conceptos cuando se manejan tiempos:
- puntos absolutos en el tiempo, a los que me gusta referirme como puntos en la historia humana
- hora local, a la que me gusta llamar reloj de pared
- marcas de tiempo completas en cualquier formato que expresen un punto absoluto en la historia humana
- tiempo de reloj de pared local incompleto
Visualiza el tiempo así:
-------+-------------------+-------+--------+----------------+------>
| | | | |
Dinosaurs died Jesus born Y2K Mars colonised ???
(no a escala)
Un punto absoluto en esta línea se puede expresar como:
- 1296096875
- 27 de enero de 2011 02:54:35 Europa / Londres
Ambos formatos expresan el mismo punto absoluto en el tiempo en diferentes notaciones. El primero es un contador simple que comenzó aproximadamente aquí:
start of UNIX epoch
|
-------+-------------------+------++--------+----------------+------>
| | | | |
Dinosaurs died Jesus born Y2K Mars colonised ???
Este último es un contador mucho más complicado pero igualmente válido y expresivo que comenzó aproximadamente aquí:
start of Gregorian calendar
|
-------+-------------------+-------+--------+----------------+------>
| | | | |
Dinosaurs died Jesus born Y2K Mars colonised ???
Las marcas de tiempo de UNIX son simples. Son un contador que comenzó en un punto específico en el tiempo y que sigue aumentando en 1 por segundo (para la definición oficial de lo que es un segundo). Imagínense que alguien en Londres inició un cronómetro a la medianoche del 1 de enero de 1970, que todavía está en funcionamiento. Eso es más o menos lo que es una marca de tiempo UNIX. Todo el mundo usa el mismo valor de ese cronómetro.
El tiempo de reloj de pared legible por el hombre es más complicado, y es aún más complicado por el hecho de que se abrevia y se omiten partes del mismo en el uso diario. 02:54:35 significa casi nada en la línea de tiempo de la foto de arriba. Jan. 27 2011 02:54:35 ya es mucho más específico, pero aún podría significar una variedad de puntos diferentes en esta línea. "Cuando el reloj marcó 02:54:35 el 27 de enero de 2011 en Londres, Europa " ahora es finalmente un punto absoluto inequívoco en esta línea, porque solo hay un punto en el tiempo en el que esto era cierto.
Por lo tanto, las zonas horarias son un "modificador" de los "tiempos de reloj de pared" que son necesarios para expresar un único punto absoluto en el tiempo utilizando una notación de calendario / hora / minuto / segundo. Sin una zona horaria, una marca de tiempo en dicho formato es ambigua, porque el reloj marcó 02:54:35 el 27 de enero de 2011 en todos los países del mundo en diferentes momentos.
Una marca de tiempo UNIX inherentemente no tiene este problema.
Para convertir de una marca de tiempo UNIX a una hora de reloj de pared legible por humanos, debe especificar en qué zona horaria desea que se muestre la hora. Para convertir la hora de reloj de pared a una marca de tiempo UNIX, necesita saber qué zona horaria se supone que debe estar. date_default_timezone_set
incluir la zona horaria cada vez con cada conversión, o establecer la zona horaria predeterminada para usar con date_default_timezone_set
.