2012-04-13 14 views
8

Il seguente script sta tornando nel momento sbagliato, dopo che io chiamo date_default_timezone_set("UTC")Data PHP tornando momento sbagliato

<?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>"; 

?> 

Il fuso orario sul server è BST. Quindi, ciò che dovrebbe accadere è che la seconda chiamata a "data" debba restituire un'ora di ritardo rispetto alla prima chiamata. In realtà restituisce un tempo di 5 ore rispetto al primo.

Si noti che il server era stato originariamente impostato con il fuso orario EDT (UTC -4). È stato modificato in BST (UTC +1) e il server è stato riavviato.

Non riesco a capire se si tratta di un problema PHP o un problema con il server.

+0

cosa è date_default_timezone_get() che mostra * prima * di cambiare il fuso orario? – BenOfTheNorth

+0

Fuso orario: Europa/Londra – gargantuan

+0

E qual è il comando del terminale 'date' del tuo server? –

risposta

6

Questo non è quasi certamente un errore in php, ma nella configurazione del fuso orario locale.

Molto probabilmente, non è stato effettivamente modificato il fuso orario del sistema, ma solo quello di un display interattivo. Verifica che /etc/localtime corrisponda a ciò che ti aspetti. Sui sistemi debian, è possibile eseguire tzselect (con privilegi di superutente) per impostare il fuso orario del sistema.

Dopo aver impostato il fuso orario, potrebbe essere necessario reimpostare l'orologio. Su molti sistemi, ciò dovrebbe avvenire automaticamente nel tempo, ma è possibile farlo manualmente eseguendo ntpdate -u pool.ntp.org.

1

Si dovrebbe controllare il manuale php per il fuso orario corretto del proprio paese. Quindi impostalo nella funzione date_default_timezone_set(). Per chiarezza, ho spiegato qui http://t2techblog.com/php-a-simple-function-for-getting-the-current-nigeria-local-time/

+0

Forse potresti fornire un esempio. – Lance

+0

Esempio: una semplice funzione che restituisce l'ora corretta nel mio paese (Nigeria) con un messaggio di benvenuto.

+0

Sono davvero dispiaciuto che la funzione e i miei testi siano un po 'ingarbugliati insieme. Sono nuovo qui .. Sto ancora cercando di capire come funzionano le cose –

0

basta impostare la tua regione con codice seguente

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 supportati Timezones http://www.php.net/manual/en/timezones.php