2012-04-13 18 views
8

La siguiente secuencia de comandos está devolviendo el momento equivocado después de que llamo date_default_timezone_set("UTC")fecha de PHP volver momento equivocado

<?PHP 
    $timestamp = time(); 
    echo "<p>Timestamp: $timestamp</p>"; 

    // This returns the correct time 
    echo "<p>". date("Y-m-d H:i:s", $timestamp) ."</p>"; 


    echo "<p>Now I call 'date_default_timezone_set(\"UTC\")' and echo out the same timestamp.</p>"; 
    echo "Set timezone = " . date_default_timezone_set("UTC"); 

    // This returns a time 5 hours in the past 
    echo "<p>". date("Y-m-d H:i:s", $timestamp) ."</p>"; 

?> 

La zona horaria en el servidor es BST. Entonces, lo que debería pasar es que la segunda llamada a 'fecha' debería devolver un tiempo de 1 hora detrás de la primera llamada. De hecho, está regresando un tiempo 5 horas detrás del primero.

Debo señalar que el servidor se configuró originalmente con la zona horaria EDT (UTC -4). Eso se cambió a BST (UTC +1) y el servidor se reinició.

No puedo entender si esto es un problema de PHP o un problema con el servidor.

+0

Lo que es date_default_timezone_get() que muestra * antes * de cambiar la zona horaria? – BenOfTheNorth

+0

Zona horaria: Europa/Londres – gargantuan

+0

¿Y cuál es el comando de la terminal 'date' de su servidor? –

Respuesta

6

Esto es casi seguro que no es un error en php, sino en la configuración de la zona horaria local.

Lo más probable es que en realidad no haya cambiado la zona horaria de todo el sistema, sino solo la de una pantalla interactiva. Compruebe que /etc/localtime coincida con lo que cabría esperar. En sistemas Debian, puede ejecutar tzselect (con privilegios de superusuario) para establecer la zona horaria de todo el sistema.

Después de configurar la zona horaria, es posible que deba restablecer el reloj. En muchos sistemas, eso debería suceder automáticamente a lo largo del tiempo, pero puede hacerlo manualmente ejecutando ntpdate -u pool.ntp.org.

1

Debería consultar el manual de php para conocer la zona horaria correcta de su país. Luego configúrelo en la función date_default_timezone_set(). Para mayor claridad, he explicado aquí http://t2techblog.com/php-a-simple-function-for-getting-the-current-nigeria-local-time/

+0

Quizás podría dar un ejemplo. – Lance

+0

Ejemplo: una función simple que devuelve la hora correcta en mi país (Nigeria) con un mensaje de bienvenida.

+0

Lamento mucho que la función y mis textos estén un tanto agrupados. Soy nuevo aquí ... Todavía estoy descifrando cómo funcionan las cosas –

0

acaba de configurar su región con el código siguiente

date_default_timezone_set("Asia/Bangkok");//set you countary name from below timezone list 
    echo $date = date("Y-m-d H:i:s", time());//now it will show "Asia/Bangkok" or your date time 

Lista de tipos de zonas horarias http://www.php.net/manual/en/timezones.php

Cuestiones relacionadas