我想转换我从数据库中获取的日期,该数据库是通过CURRENT_TIMESTAMP
生成的,并存储在timestamp
列类型中,从GMT 8到GMT 1。
$time = "2012-11-07 15:05:26"; // fetch from database
$date = new DateTime($time, new DateTimeZone('Europe/Berlin'));
echo $date->format('Y-m-d H:i:s');
但是,这将产生" 2012-11-07 15:05:26" 的输出,我敢肯定是错误的。
我在这里可能缺少什么?
首先,您需要使用原始时区实例化DateTime对象。然后,在实例化DateTime对象后,使用DateTime::setTimezone()
调整时区。
请参阅此代码,其中我使用Asia/Hong_Kong
作为示例GMT 8 TimeZone:
$time = "2012-11-07 15:05:26"; // fetch from database
$date = new DateTime($time,new DateTimeZone('Asia/Hong_Kong'));
$date->setTimezone(new DateTimeZone('Europe/Berlin'));
echo $date->format('Y-m-d H:i:s'); // yields 2012-11-07 08:05:26
如果所有原始日期始终始终为GMT 8,并且您的PHP应用程序也设置为使用GMT 8(例如,使用date_default_timezone_set()
设置),则无需将初始DateTimeZone
对象(作为新创建的DateTime
对象将使用该时区自动创建。
也许这可能会有所帮助。只需将其集成到您的查询中即可简化您的编码:
SELECT CONVERT_TZ('2012-11-07 15:05:26','+08:00','+01:00');
您可以在此处获得有关要使用的时区的更多信息。在这里以获取更多理解
检查以下内容:
<?php
$time = "2012-11-07 15:05:26"; // fetch from database
$tz_object = new DateTimeZone('Europe/Berlin');
$datetime = new DateTime($time);
$datetime->setTimezone($tz_object);
echo $datetime->format('Y-m-d H:i:s');
//output 2012-11-07 10:35:26
?>