2010-08-29 21 views
19

en el caparazón, mi tiempo es servidor (simple date en bash): Dom Ago 29 de 10:37:12 EDT 2010ponerse en php - zona horaria emite

cuando corro el código php -r "echo date('Y-m-d H:i:s');" me sale: 2010 -08-29 10:37:10

pero cuando ejecuto un script php que tiene echo date('Y-m-d H:i:s'); tengo un horario diferente, ya que php piensa que la zona horaria es UTC (el tiempo del servidor es EDT).

Mi archivo php.ini no tiene una zona horaria establecida, y no me gustaría cambiar nada, ya que no tengo idea de qué efecto tendría en otros sitios que se ejecutan en este servidor.

¿Existe una forma sencilla de obtener el tiempo-servidor en la zona horaria que se establece para el servidor?

Respuesta

14

De acuerdo con la página del manual php.ini directives, la zona horaria no está configurado de forma predeterminada si está utilizando una versión anterior a 5.3. Entonces, si usted toma un vistazo a la página para date_default_timezone_get, se utiliza el siguiente orden para obtener la zona horaria:

* Reading the timezone set using the date_default_timezone_set() function (if any) 
* Reading the TZ environment variable (if non empty) (Prior to PHP 5.3.0) 
* Reading the value of the date.timezone ini option (if set) 
* Querying the host operating system (if supported and allowed by the OS) 

UTC es el valor por defecto si todos los que fallan, así que probablemente es un buen punto de partida.

2

El servidor debe siempre tiene una zona horaria especificada en el archivo php.ini. PHP 5.3 incluso genera avisos si ese no es el caso y la extensión DateTime arrojará excepciones si intenta construir objetos sin especificar explícitamente una zona horaria (con un objeto DateTimezone) o tener una predeterminada (ya sea a través de date.timezone o date_default_timezone_set).

Por lo que estás describiendo, los escenarios más probables son:

  • diferentes archivos php.ini se están utilizando en los dos escenarios. En el primer caso, no se especifica ninguna zona horaria predeterminada, por lo que PHP intenta inferir una desde la zona horaria de todo el sistema de la máquina.
  • El (segundo) script llama date_default_timezone_set('UTC') o equivalente.
2

tarde a la fiesta, pero si desea establecer la zona horaria sin editar php.ini, se pueden poner en el código php uno de estas cadenas:

date_default_timezone_set('GMT'); 
date_default_timezone_set('Europe/Zurich'); 
date_default_timezone_set('America/New_York');