strtotime没有从datetime obj放入正确的时区


strtotime not putting the correct timezone from datetime obj

我有以下几行代码,我正在将edt时区转换为亚洲/上海(来自php手册),然后格式化为字符串显示。现在,如果我对datetime对象执行var_dump或getTimezone(),我会得到类似(2)的内容,这是正确的。但在字符串中,它仍然显示edt作为时区。不知道它为什么这么做…还有人经历过这种情况吗?有什么想法吗?谢谢

(1) $format='Y-m-d H:i:s';

$datetime = datetime::createfromformat($format,$appointment['appointment_datetime']);
///patient default shows time in China Standard 
$datetime = $datetime->setTimezone(new DateTimeZone('Asia/Shanghai'));
$display   =  date('l jS F Y 'a't' g:ia T', strtotime($datetime->format($format)));

(2) object(DateTime)[8]

public 'date' => string '2016-08-02 05:00:00.000000' (length=26)
public 'timezone_type' => int 3
public 'timezone' => string 'Asia/Shanghai' (length=13)

这是因为您使用->format将时间输出为不带时区的字符串,然后使用date()将其重新格式化,这将撤消您试图设置的任何时区设置。

您只需执行$display = $datetime->format('l jS F Y 'a't' g:ia T');