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

时间:2016-08-01 19:17:14

标签: php datetime

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

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

$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)对象(日期时间)[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)

1 个答案:

答案 0 :(得分:2)

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

您可以$display = $datetime->format('l jS F Y \a\t\ g:ia T');