PHP日期时间戳时区未正确转换

时间:2014-10-30 22:38:11

标签: php date datetime timezone datetime-format

所以我有这段代码:

$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
因此,时区没有改变......

我做错了什么?

btw它还使用了Drupal 6 date_api.module:http://drupalcontrib.org/api/drupal/contributions!date!date_api.module/function/date_make_date/6

1 个答案:

答案 0 :(得分:3)

根据评论

时间戳始终为UTC 。您无法将时区应用于时间戳 - 将其时区视为0.无论您做什么,它都会保留为0.您要求使用U格式化日期 - 手动说明:

  

U:Unix时代以来的秒数(1970年1月1日00:00:00 GMT)。

你无法从Unix Epoch获得纽约的秒数。这个数字对于世界上任何一个地方都是一样的。 现在,如果您使用$date->format('Y-m-d H:i:s')格式化该日期,那么您将获得具有纽约时区偏移的正确格式化时间。

长话短说 - 这里没有任何问题。这一切都按预期工作。