【问题标题】:convert timezone to another timezone将时区转换为另一个时区
【发布时间】:2012-10-27 05:18:42
【问题描述】:

我想将我从数据库中获取的日期(通过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" 的输出,我很确定这是错误的。

我在这里可能缺少什么?

【问题讨论】:

  • 如果你不介意,你期望什么输出?
  • 格式相同,但距$time时间不到7小时
  • 为什么不从日期开始否定 7 小时?
  • 恐怕我不会这样做,我正在寻找一种可以操纵时区的方法,因此我可以在时区之间进行转换。
  • 看看我的回答,也许能帮上忙

标签: php mysql date datetime timezone


【解决方案1】:

首先,您需要使用原始时区实例化 datetime 对象。然后,在实例化 datetime 对象后,用DateTime::setTimezone() 调整时区。

查看这段代码,我以Asia/Hong_Kong 为例,GMT+8 时区:

$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() 设置),则无需传递初始的@987654327 @ 对象,因为新创建的 DateTime 对象将自动使用该时区创建。

【讨论】:

  • 如果我不知道数据库服务器的时区怎么办?
【解决方案2】:

也许这会有所帮助。 只需将其集成到您的查询中即可简化您的编码:

SELECT CONVERT_TZ('2012-11-07 15:05:26','+08:00','+01:00');

您可以在此处获得有关您要使用的timezones 的更多信息。并here 了解更多

【讨论】:

    【解决方案3】:

    检查这个:

    <?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
    ?>
    

    【讨论】:

    • 嘿downvoter !!,请您告诉我原因吗?
    猜你喜欢
    • 1970-01-01
    • 2014-02-11
    • 2019-04-14
    • 2015-02-21
    • 1970-01-01
    • 2012-01-30
    • 2015-05-06
    • 2021-01-23
    相关资源
    最近更新 更多