PHP/MySQL时区澄清

Dod*_*nas 2 php mysql timezone timestamp

我目前正在解决将MySQL时间转换为特定时区的概念,这取决于用户的设置.

我的所有MySQL时间都以UTC时间存储,格式如下:

2009-11-08 17:06:40

一旦我查询时间,我不太确定如何使用PHP将其转换为适当的时区.

因此,在上面的例子中,我想显示:

2009-11-08 09:06:40

这是我目前拥有的(可能需要修复):

$sql = 'SELECT date FROM mytable';
    require("connection.php");
    $result = mysql_db_query($DBname,$sql,$link); 
    while($row = mysql_fetch_assoc($result)) { 

    $dt_obj = new DateTime($row['date']); 
    $dt_obj->setTimezone(new DateTimeZone('PST')); 
    echo $dt_obj;       
    echo "<br>";
     }
Run Code Online (Sandbox Code Playgroud)

首先,我收到以下错误:

Catchable fatal error: Object of class DateTime could not be converted to string

其次,我很困惑,无论如何我正确地设置它以正确的时区显示时间(在这种情况下,PST).

任何有关如何做到这一点的建议将不胜感激.谢谢!

更新:

我接受了GZipp的建议,并将代码修改为:

$dt_obj->setTimezone(new DateTimeZone('America/Los_Angeles')); 
echo $dt_obj->format('Y-m-d H:i:s');
Run Code Online (Sandbox Code Playgroud)

但是,它显示我的时间(使用上面的例子):

2009-11-08 15:06:40

关于什么会导致这个的任何想法?

GZi*_*ipp 5

我想这就是你所追求的;

$dt_obj = new DateTime($row['date']); 
$dt_obj->setTimezone(new DateTimeZone('America/Los_Angeles')); 
echo $dt_obj->format('Y-m-d H:i:s');
Run Code Online (Sandbox Code Playgroud)

使用支持的时区列表.

更新到已编辑的问题:要确保PHP将数据库中的时间视为UTC时间,请执行以下操作:

$row['time'] = '2009-11-08 09:06:40';

$dt_obj = new DateTime($row['time'], new DateTimeZone('UTC')); 
echo 'UTC: ' . $dt_obj->format('Y-m-d H:i:s') . '<br />';  // UTC: 2009-11-08 09:06:40
$dt_obj->setTimezone(new DateTimeZone('America/Los_Angeles')); 
echo 'Los Angeles: ' . $dt_obj->format('Y-m-d H:i:s');  // Los Angeles: 2009-11-08 01:06:40
Run Code Online (Sandbox Code Playgroud)