PHP TimeTime Timezones - Método Constructor vs Setter
Cuando se usa PHPDateTime
clase y tratar de establecer unDateTimeZone
Obtengo resultados diferentes dependiendo de cómo lo configuro: usando elDateTime::__construct
o usando elDateTime::setTimezone
método.
Aquí hay un ejemplo:
$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
Ver tambiénhttp://3v4l.org/LrZfM
He mirado a mi alrededor y no he encontrado una explicación adecuada que aborde estos comportamientos particulares que no sea el siguiente comentario en eldocumentos php: datetime.settimezone y el librophp | Guía del arquitecto para la programación de fecha y hora: Manejo de zonas horarias - DateTimeZone.
El comentario afirma que elDateTime::setTimezone
El método cambiará la zona horaria para un punto particular en el tiempo (una marca de tiempo) pero la marca de tiempo de Unix permanece sin cambios.
Por otro lado elDateTime::__construct
El parámetro DateTimeZone se usa para "sobrescribir la zona horaria predeterminada actual con una definida por el usuario"Capítulo 3: Manejo de zonas horarias - DateTimeZone.
Aparte de estos, no hay mucho sobre el tema (que pude encontrar).
Esto es lo que me gustaría saber:
Explicación adicional de estas dos formas de establecer las zonas horarias¿Cuándo debo usar elDateTime::__construct
para establecer la zona horaria¿Cuándo debo usar elDateTime::setTimezone
para establecer la zona horariaUn claro ejemplo del uso de uno frente al otro o cómo usarlos en conjunto