[英]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 +00:00
你会认为它会输出:
2015年8月25日星期二 - 07:00 PM -04:00
如何使用设置的时区正确输出格式?
阅读DateTime::__construct()
的文档,其中第二个参数说明:
注意:当$ time参数是UNIX时间戳(例如@ 946684800)或指定时区(例如2010-01-28T15:00:00 + 02:00)时,将忽略$ timezone参数和当前时区。
基于此,在使用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
*/
请看这里的例子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.