PHP DateTime Timezones - Конструктор против метода Setter

При использовании PHPDateTime класс и попытаться установитьDateTimeZone Я получаю разные результаты в зависимости от того, как я его установил: используяDateTime::__construct или используяDateTime::setTimezone метод.

вот пример:

$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

Смотрите такжеhttp://3v4l.org/LrZfM

Я огляделся и не нашел адекватного объяснения, которое бы касалось этого конкретного поведения, кроме следующего комментария вphp документы: datetime.settimezone и книгаphp | Руководство архитектора по программированию даты и времени: работа с часовыми поясами - DateTimeZone.

В комментарии говорится, чтоDateTime::setTimezone Метод изменит часовой пояс для определенного момента времени (отметка времени), но отметка времени Unix останется неизменной.

В другой рукеDateTime::__construct Параметр DateTimeZone используется для «перезаписи текущего часового пояса по умолчанию на определенный пользователем»Глава 3: Работа с часовыми поясами - DateTimeZone.

Помимо этого нет много по этому вопросу (что я смог найти).

Вот что я хотел бы знать:

Дальнейшее объяснение этих двух способов установки часовых поясовКогда я должен использоватьDateTime::__construct установить часовой поясКогда я должен использоватьDateTime::setTimezone установить часовой поясЯркий пример использования одного против другого или как использовать их вместе

Ответы на вопрос(1)

Ваш ответ на вопрос