我目前正在解决将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
关于导致这种情况的任何想法?
答案 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>');