【问题标题】:PHP/MySQL Timezone ClarificationPHP/MySQL 时区说明
【发布时间】:2010-12-14 09:57:38
【问题描述】:

我目前在思考将 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

有什么想法会导致这种情况吗?

【问题讨论】:

    标签: php mysql timezone timestamp


    【解决方案1】:

    我想这就是你所追求的;

    $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
    

    【讨论】:

    • 服务器的默认时区是多少(在 php.ini 中;您可以使用 default_timezone_get() 或 phpinfo() 找到它)?看起来它设置为比美国/洛杉矶晚 6 小时的时区)
    • 感谢 GZipp 的回复。 phpinfo() 报告默认时区是:America/Chicago。
    • 就是这样。非常感谢。
    【解决方案2】:

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

    的结果

    编辑:对于您的新问题,我猜您的默认格式已经设置为 PST,因此当创建新日期时,它是使用该时区创建的,因此设置时区不会改变任何内容。你可以去看看是不是这样。你也可以看看date_default_timezone_set('&lt;tz&gt;');

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 2023-03-14
      • 2012-08-05
      • 1970-01-01
      • 2015-12-01
      • 2011-01-12
      相关资源
      最近更新 更多