PHP DateTime Timezones - Konstruktor vs Setter-Methode

Bei Verwendung von PHPDateTime class und versuche ein @ zu setzDateTimeZone Ich erhalte unterschiedliche Ergebnisse, je nachdem, wie ich es eingestellt habe: mit demDateTime::__construct oder mit demDateTime::setTimezone Methode

Hier ist ein Beispiel

$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

Siehe auchhttp: //3v4l.org/LrZf

Ich habe mich umgesehen und keine angemessene Erklärung gefunden, die dieses bestimmte Verhalten außer dem folgenden Kommentar im @ behandelphp docs: datetime.settimezone und das Buchphp | architect's Guide zur Datums- und Zeitprogrammierung: Umgang mit Zeitzonen - DateTimeZone.

Der Kommentar besagt, dass dasDateTime::setTimezoneie @ -Methode ändert die Zeitzone für einen bestimmten Zeitpunkt (einen Zeitstempel), der Unix-Zeitstempel bleibt jedoch unverändert.

n der anderen Hand dasDateTime::__constructer @ DateTimeZone-Parameter wird verwendet, um "die aktuelle Standard-Zeitzone mit einer benutzerdefinierten zu überschreiben".Kapitel 3: Umgang mit Zeitzonen - DateTimeZone.

Andere als diese gibt es nicht viel zu dem Thema (was ich finden konnte).

Das ist, was ich gerne wissen würde:

Weitere Erläuterungen zu diesen beiden Möglichkeiten zum Festlegen der ZeitzonenWann soll ich das @ benutzDateTime::__construct um die Zeitzone einzustellenWann soll ich das @ benutzDateTime::setTimezone um die Zeitzone einzustellen Ein anschauliches Beispiel für die Verwendung von einem gegen das andere oder wie man sie zusammen verwendet

Antworten auf die Frage(1)

Ihre Antwort auf die Frage