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

时间:2014-01-15 10:03:13

标签: php datetime

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

在其中,我想创建一个计时器函数,用于处理本地服务器时间(+8)的时间。

目标是有一个函数将DateTime对象返回到任何给定日期(以'Y-m-d H: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数据库中的日期时间字段),则无法从中生成新的日期时间对象,因为它被视为UTC。上面函数生成的DateTime对象总是增加8小时。

如何更改上述功能,以便插入的$ date已经在正确的+8时区内,并且未将+8更改为输出?

1 个答案:

答案 0 :(得分:2)

我没试过,但是医生说:

public DateTime::__construct() ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )
  

时间:日期/时间字符串。有效格式在日期和时间中说明   格式。在此处输入NULL以获取使用时的当前时间   $ timezone参数。

     

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

     

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

http://at2.php.net/manual/en/datetime.construct.php

所以......这个:

$date_new = new DateTime($date."+08:00");

或者这个:

$date = new DateTime($date, new DateTimeZone('Asia/Hong_Kong'));

应该做的工作