PHP日期时间格式不尊重时区


PHP DateTime Format does not respect timezones?

所以我有以下代码:

$timezone = new DateTimeZone('America/New_York');
$datetime = new DateTime(date('r', 1440543600), $timezone);
echo $datetime->format('l, F j, Y - h:i A e');

输出如下内容:

2015年8月25日星期二- 11:00 PM +00:00

你会认为它会输出:

2015年8月25日星期二- 07:00 PM -04:00

我如何得到格式正确输出设置时区?

阅读DateTime::__construct()的文档,其中is表示第二个参数:

注意:$timezone参数和当前时区将被忽略当$time参数是UNIX时间戳时(例如@946684800)或指定时区(例如2010-01-28T15:00:00+02:00)。

在此基础上,使用unix时间戳创建DateTime对象后设置时区:

$timezone = new DateTimeZone('America/New_York');
$datetime = new DateTime('@1440543600');
$datetime->setTimezone($timezone);
演示

我认为问题不在于你如何输出你的日期,而在于你如何输入它。'r'格式选项包括时间偏移。

如果你用一个没有偏移量的字符串创建你的DateTime对象,你将得到预期的结果。

$timezone = new DateTimeZone('America/New_York');
$datetime = new DateTime("2015-08-20 01:24", $timezone);
echo $datetime->format('l, F j, Y - h:i A e');
$datetime->setTimezone(new DateTimeZone('America/Chicago'));
echo "'n";
echo $datetime->format('l, F j, Y - h:i A e');
/* outputs
Thursday, August 20, 2015 - 01:24 AM America/New_York
Thursday, August 20, 2015 - 12:24 AM America/Chicago
*/