PHP date (); com fuso horário?

Então eu verifiquei a lista de fusos horários suportados no PHP e eu queria saber como eu poderia incluí-los na data (); function? Obrigado!

Eu não quero um fuso horário padrão, cada usuário tem seu fuso horário armazenado no database, eu uso esse fuso horário do usuário e o uso. Como? Eu sei como tirá-lo do database, e não como usá-lo, no entanto.

Para essa tarefa, você realmente deveria estar usando a class DateTime do PHP. Ignore todas as respostas que lhe aconselham usar data () ou date_set_time_zone, é simplesmente ruim e desactualizado.

Eu usarei o pseudocódigo para demonstrar, então tente ajustar o código para atender às suas necessidades.

Supondo que a variável $ tz contém o nome da string de um fuso horário válido e a variável $ timestamp contém o carimbo de data / hora que deseja formatar de acordo com o fuso horário, o código ficaria assim:

$tz = 'Europe/London'; $timestamp = time(); $dt = new DateTime("now", new DateTimeZone($tz)); //first argument "must" be a string $dt->setTimestamp($timestamp); //adjust the object to correct timestamp echo $dt->format('dmY, H:i:s'); 

A class DateTime é poderosa, e para entender todas as suas capacidades – você deve dedicar algum tempo seu tempo lendo sobre isso no php.net. Para responder a sua pergunta completamente – sim, você pode ajustar o parâmetro do fuso horário de forma dinâmica (em cada iteração durante a leitura do db, você pode criar um novo object DateTimeZone ()).

Se entendi corretamente, você precisa primeiro definir o fuso horário:

 date_default_timezone_set('UTC'); 

E do que você pode usar a function de data:

 // Prints something like: Monday 8th of August 2005 03:12:46 PM echo date('l jS \of FY h:i:s A'); 

Use a class DateTime em vez disso, pois é compatível com fusos horários. O DataTime equivalente da date() é o DateTime::format .

Um invólucro extremamente útil para DateTime é Carbono – definitivamente dê uma olhada.

Você quer armazenar no database como UTC e converter no nível do aplicativo.

Isso deve gostar disso:

 date_default_timezone_set('America/New_York'); 

Tente isso. Você pode passar o carimbo de data / hora de Unix ou a cadeia de data e hora

 public static function convertToTimezone($timestamp, $fromTimezone, $toTimezone, $format='Ymd H:i:s') { $datetime = is_numeric($timestamp) ? DateTime::createFromFormat ('U' , $timestamp, new DateTimeZone($fromTimezone)) : new DateTime($timestamp, new DateTimeZone($fromTimezone)); $datetime->setTimezone(new DateTimeZone($toTimezone)); return $datetime->format($format); } 

A resposta acima me fez saltar através de alguns arcos / gotchas, então apenas publicando o código mais limpo que funcionou para mim:

 $myTimestamp = 123456789; $dt = new DateTime(); $dt->setTimezone(new DateTimeZone('America/New_York')); $dt->setTimestamp($myTimestamp); return $dt->format('F j, Y @ G:i'); 

Eu criei esta function muito direta, e isso funciona como um encanto:

 function ts2time($timestamp,$timezone){ /* input: 1518404518,America/Los_Angeles */ $date = new DateTime(date("d FYH:i:s",$timestamp)); $date->setTimezone(new DateTimeZone($timezone)); $rt=$date->format('M d, Y h:i:s a'); /* output: Feb 11, 2018 7:01:58 pm */ return $rt; } 

Você pode replace o valor do database na function date_default_timezone_set, date_default_timezone_set (SOME_PHP_VARIABLE); mas apenas precisa cuidar dos valores exatos relevantes para os fuso horários.