Php 如何从已经在特定时区中的字符串创建DateTime对象?

Php 如何从已经在特定时区中的字符串创建DateTime对象?,php,datetime,Php,Datetime,我在一个所有默认时区设置都设置为UTC的环境(wordpress)中工作 其中,我想创建一个计时器函数,该函数处理始终在本地服务器时间(+8)内的时间 我们的目标是使用一个函数将DateTime对象返回到任何给定的日期(使用'Y-m-dh:i:s'格式输入,始终在本地+8时区) function datetime_obj($date = NULL) { $date_new = new DateTime($date); $date_new->setTimezone(new D

我在一个所有默认时区设置都设置为UTC的环境(wordpress)中工作

其中,我想创建一个计时器函数,该函数处理始终在本地服务器时间(+8)内的时间

我们的目标是使用一个函数将DateTime对象返回到任何给定的日期(使用
'Y-m-dh:i:s'
格式输入,始终在本地+8时区)

function datetime_obj($date = NULL) {
    $date_new = new DateTime($date);
    $date_new->setTimezone(new DateTimeZone('Asia/Hong_Kong'));
    return $date_new;
}
当我尝试获取今天的日期/时间信息($date=NULL)时,这非常有效。但是如果我将现有时间(以HKG时间为单位)作为字符串(比如从MySQL数据库中的datetime字段中),我无法从中生成新的datetime对象,因为它被视为UTC。从上述函数生成的datetime对象始终在其中添加了8个小时


如何更改上述函数,使插入的$日期被接受为已在正确的+8时区,而不被更改为+8输出?

我还没有尝试过,但文档上说:

public DateTime::__construct() ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )
时间:日期/时间字符串。有效格式在日期和时间中解释 格式。在此处输入NULL以获取使用 $timezone参数

时区:表示$time时区的DateTimeZone对象。如果 忽略$timezone,将使用当前时区

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

所以…这个:

$date_new = new DateTime($date."+08:00");
或者这个:

$date = new DateTime($date, new DateTimeZone('Asia/Hong_Kong'));
我应该做这项工作