PHP时区工作不正常


PHP Timezone not working correctly

因此,我们在美国America/New_York的EDT部分有内部服务器,由于某些原因,该[SSSCE][1]代码不起作用。

<?php
echo date_default_timezone_get() . " <br />";
$dateCal = "2015-06-22 13:00:00"; // EDT Time
$schedule_date = new DateTime($dateCal, new DateTimeZone("America/Chicago") );
echo $dateCal  . " <br />"; // 2015-06-22 13:00:00
echo date_format($schedule_date, 'Y-m-d H:i:s T'); // 2015-06-22 13:00:00 CDT
?>

输出结果为:

UTC 
2015-06-22 13:00:00 
2015-06-22 13:00:00 CDT

当第二次应该是12 NOON,而不是1PM时。

我该如何解决这个问题?

您没有正确处理时区

// set the datetime in the EDT timezone
$schedule_date = new DateTime("2015-06-22 13:00:00", new DateTimeZone("America/New_York") );
echo $schedule_date->format('Y-m-d H:i:s T'). " <br />"; // 2015-06-22 13:00:00
// change it to CDT
$schedule_date->setTimeZone(new DateTimeZone('America/Chicago'));
echo $schedule_date->format('Y-m-d H:i:s T'). " <br />"; // 2015-06-22 12:00:00

演示