Wenn die PHP DateTime
Klasse verwenden und versuchen, eine DateTimeZone
einstellen ich unterschiedliche Ergebnisse, je nachdem wie ich stellte es: mit dem DateTime::__construct
oder mit dem DateTime::setTimezone
Methode.PHP Datetime-Zeitzonen - Constructor vs Setter-Methode
hier 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 http://3v4l.org/LrZfM auch
Ich habe umsah und habe keine angemessene Erklärung dafür gefunden, dass dieses spezielles Verhalten außer dem folgenden Kommentar Adressen im php docs: datetime.settimezone und das Buch php|architect's Guide to Date and Time Programming: Dealing with Timezones - DateTimeZone.
Der Kommentar besagt, dass die DateTime::setTimezone
Methode die Zeitzone für einen bestimmten Zeitpunkt (einen Zeitstempel) ändert, aber der Unix-Zeitstempel bleibt unverändert.
In der anderen Hand wird der DateTimeZone-Parameter DateTime::__construct
10 verwendet, um die aktuelle Standardzeitzone mit einem benutzerdefinierten zu überschreiben .
Ansonsten gibt es nicht viel zum Thema (das ich finden konnte).
Dies ist, was würde ich gerne wissen:
die Zeitzonen- Eine weitere Erläuterung dieser beiden Möglichkeiten
- einstellen Wann soll ich die
DateTime::__construct
verwenden, um die Zeitzone - einstellen Wenn ich die verwendet werden soll
DateTime::setTimezone
die Zeitzone - ein anschauliches Beispiel setzen eines der Verwendung gegen die anderen oder, wie sie in Verbindung zu verwenden
Eine Zeitzone im Konstruktor bedeutet, dass "$ date" in dieser Zeitzone ist; Wenn Sie eine Zeitzone einstellen, verschiebt sich das Datum entsprechend der Differenz zwischen der Zeitzone bei der Konstruktion und der gegebenen Zeitzone. –