我在一个环境(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更改为输出?
答案 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'));
应该做的工作