Итак, у меня есть этот код:
$timestamp = 1414708099;
echo $timestamp;
$date = date_make_date($timestamp, 'UTC', 'datestamp');
date_timezone_set($date, timezone_open('America/New_York'));
$timestamp = $date->format('U');
echo '<br>';
echo $timestamp;
который должен конвертировать часовой пояс начальной метки времени из UTC в нью-йорк.
но потом это заканчивается печатью
1414708099<br>1414708099
следовательно, часовой пояс не изменился …
что я сделал не так?
Кстати, он также использует Drupal 6 date_api.module: http://drupalcontrib.org/api/drupal/contributions!date!date_api.module/function/date_make_date/6
Временная метка всегда UTC. Вы не можете применить часовой пояс к временной метке — считайте его часовой пояс равным 0. Что бы вы ни делали, оно остается равным 0. Вы запросили дату, отформатированную с помощью U — manual, заявляет это:
U: Секунды с начала Unix (1 января 1970 г., 00:00:00 по Гринвичу).
Вы не можете получить секунды от Unix Epoch для Нью-Йорка. Это число одинаково для любого места в мире.
Теперь, если бы вы отформатировали эту дату, используя, скажем, $date->format('Y-m-d H:i:s')
тогда вы получите правильно отформатированное время со смещением часового пояса для Нью-Йорка.
Короче говоря, здесь нет никаких проблем. Все работает как задумано.
Других решений пока нет …