PHP DateTime Timezones - método Construtor vs Setter
Ao usar o PHPDateTime
classe e tente definir umDateTimeZone
Eu obtenho resultados diferentes dependendo de como eu o defino: usando oDateTime::__construct
ou usando oDateTime::setTimezone
método.
aqui está um exemplo:
$date = '2014-08-01'
$dateTimeOne = new DateTime($date, new DateTimeZone('America/Los_Angeles'));
echo $dateTimeOne->format('Y-m-d\TH:i:sP');
// 2014-08-01T00:00:00-07:00
$dateTimeTwo = new DateTime($date);
$dateTimeTwo->setTimezone(new DateTimeZone('America/Los_Angeles'));
echo $dateTimeTwo->format('Y-m-d\TH:i:sP');
// 2014-07-31T17:00:00-07:00
Veja tambémhttp://3v4l.org/LrZfM
Eu olhei em volta e não encontrei uma explicação adequada que abordasse esse comportamento específico, além do comentário a seguir nodocs php: datetime.settimezone e o livroGuia do arquiteto para programação de data e hora: lidando com fusos horários - DateTimeZone.
O comentário afirma que oDateTime::setTimezone
O método alterará o fuso horário para um ponto específico no tempo (um registro de data e hora), mas o registro de data e hora do Unix permanece inalterado.
Por outro lado, oDateTime::__construct
O parâmetro DateTimeZone é usado para "substituir o fuso horário padrão atual por um definido pelo usuário"Capítulo 3: Lidando com fusos horários - DateTimeZone.
Fora isso, não há muito sobre o assunto (que eu consegui encontrar).
Isto é o que eu gostaria de saber:
Mais explicações sobre essas duas maneiras de definir os fusos horáriosQuando devo usar oDateTime::__construct
definir o fuso horárioQuando devo usar oDateTime::setTimezone
definir o fuso horárioUm exemplo claro de como usar um vs o outro ou como usá-los em conjunto