时区转换:使用PHP中的DateTimeZone,输出提前一小时


Timezones conversion: Using DateTimeZone in PHP, the output is an hour early

我有一个小函数:

public static function date($input = 'now', $format = 'Y-m-d H:i', $tzFrom, $tzTo) {
        $date = date_create($input, new DateTimeZone($tzFrom))->setTimezone(new DateTimeZone($tzTo));
        if ($format == 'TS') {
            return strtotime($date->format('Y-m-d H:i'));
        }
        return $date->format($format);
}

这是它的输出:

echo '<br>' . DT::date('now', 'TS', 'America/Los_Angeles', 'UTC'); // 1452281400
This is:
1452281400 -> Fri, 08 Jan 2016 19:30:00

但这是错误的,因为当前UTC时间:2016年1月8日星期五20:30:00,而不是19:30:00。

额外的1小时在哪里?如何修复我的功能?谢谢

function convert_time($timestring,$format="Y-m-d H:i:s",$from,$to){
    $default = date_default_timezone_get(); // get default to reset
    date_default_timezone_set($from); // set the `from` timezone
    $the_date = strtotime($timestring); // given string to time
    date_default_timezone_set($to);  // given string to required zone
    $req_date = date($format,$the_date); // required date in required format
    date_default_timezone_set($default); // reset to default
    return $req_date;
}

希望这能帮助