2011-12-29 13 views
13

Codice primoCome arrivare timestamp Unix in PHP sulla base di fuso orario

echo time() . '<br/>'; 
echo date('Y-m-d H:i:s') . '<br/>'; 
date_default_timezone_set('America/New_York'); 

echo time() . '<br/>'; 
print_r($timezones[$timezone] . '<br/>'); 
echo date('Y-m-d H:i:s') . '<br/>'; 

Nel codice precedente la data viene stampata in base al fuso orario, ma unix timestamp è lo stesso anche dopo aver impostato di default fuso orario

Come possiamo stampare un timestamp unix in base al fuso orario?

risposta

27

La risposta fornita da Volkerk è corretta, ma se hai davvero bisogno di un lavoro, guarda il mio esempio.

<?php 

//default timezone 
$date = new DateTime(null); 
echo 'Default timezone: '.$date->getTimestamp().'<br />'."\r\n"; 

//America/New_York 
$date = new DateTime(null, new DateTimeZone('America/New_York')); 
echo 'America/New_York: '.$date->getTimestamp().'<br />'."\r\n"; 

//Europe/Amsterdam 
$date = new DateTime(null, new DateTimeZone('Europe/Amsterdam')); 
echo 'Europe/Amsterdam: '.$date->getTimestamp().'<br />'."\r\n"; 

echo 'WORK AROUND<br />'."\r\n"; 
// WORK AROUND 
//default timezone 
$date = new DateTime(null); 
echo 'Default timezone: '.($date->getTimestamp() + $date->getOffset()).'<br />'."\r\n"; 

//America/New_York 
$date = new DateTime(null, new DateTimeZone('America/New_York')); 
echo 'America/New_York: '.($date->getTimestamp() + $date->getOffset()).'<br />'."\r\n"; 

//Europe/Amsterdam 
$date = new DateTime(null, new DateTimeZone('Europe/Amsterdam')); 
echo 'Europe/Amsterdam: '.($date->getTimestamp() + $date->getOffset()).'<br />'."\r\n"; 
?> 

Prendi il timestamp regolare e aggiungere l'UTC di offset

+1

È probabilmente fuorviante usare una soluzione come questa in quanto si rischia di entrare in tutti i tipi di problemi con i fusi orari rispetto al timestamp di unix. Dato che l'OP ha specificato un formato di output, sarebbe meglio usare il metodo di formattazione di DateTime, ad esempio $ date-> format ('Y-m-d H: i: s') – liquorvicar

+1

Sono assolutamente d'accordo con te e non lo consiglierei. Memorizzare come timestamp unix sarebbe meglio e quando si visualizzano i dati convertiti in fuso orario corretto. Se l'utente sta per archiviare queste informazioni in un database, scarterei completamente il formato di timestamp unix e andrò per un tipo di database datetime (a causa del diverso datetime/funzioni che renderà la tua vita più facile) –

+0

E 'giusto - '$ date = new DateTime (null, new DateTimeZone ('Philippines')); '. Voglio solo ottenere da PH. – RoCk

18

https://en.wikipedia.org/wiki/Unix_time

tempo Unix, o il tempo POSIX, è un sistema per descrivere istanti nel tempo, definito come il numero di secondi trascorsi dalla mezzanotte Coordinated Universal Time (UTC) di Giovedi, 1 ° gennaio, 1970

Il timestamp di unix non è influenzato dall'impostazione del fuso orario. L'impostazione del fuso orario influisce solo sull'interpretazione del valore del timestamp.

+1

Voglio che il tempo di registrazione di 'società' in base al fuso orario, qualsiasi lavoro in giro per questo – jimy

+0

dovreste memorizzare il timestamp _and_ l'id fuso orario . Oppure memorizzi un'altra rappresentazione di data/ora che può includere o meno il fuso orario, ad es. come ISO 8601 date – VolkerK

Problemi correlati