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
关于什么会导致这个的任何想法?
我想这就是你所追求的;
$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)