PHP / MySQL时区澄清

时间:2009-11-08 17:47:56

标签: 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>";
     }

首先,我收到以下错误:

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');

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

2009-11-08 15:06:40

关于导致这种情况的任何想法?

2 个答案:

答案 0 :(得分: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');

使用List of Supported Timezones

更新到已编辑的问题:为确保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

答案 1 :(得分:1)

我可能错了,但看起来它正在抱怨你的echo $dt_obj;声明。您可以尝试回显DateTime :: format();

的结果

编辑:对于你的新问题,我猜你的默认格式已经设置为PST,所以当创建新日期时,它会使用该时区创建,从而设置时区没有任何变化。您可以查看是否是这种情况。您也可以查看date_default_timezone_set('<tz>');