【问题标题】:Parse a UTC date, output local datetime解析 UTC 日期,输出本地日期时间
【发布时间】:2021-06-29 20:43:06
【问题描述】:

我已经阅读了How to get local time in php? 和类似的问题,但在这里我想反其道而行之:

给定的UTC日期时间(例如2021-03-31 23:45:00),如何输出本地时区的日期?

$dt = new DateTime("2021-03-31 23:45:00");  // parse the UTC datetime
echo $dt->format('m/d/Y, H:i:s');           

在欧洲/巴黎时区,它应该输出2021-04-01 01:45:00,但在这里它仍然输出2021-03-31 23:45:00。如何解决这个问题?

我也试过strtotime,结果相似;我也试过:

date_default_timezone_set('UTC');
$dt = new DateTime("2021-03-31 23:46:14");
date_default_timezone_set('Europe/Paris');
echo $dt->format('m/d/Y, H:i:s');

没有成功。

【问题讨论】:

    标签: php datetime timezone utc strtotime


    【解决方案1】:

    您需要更改日期的时区(使用DateTime::setTimeZone()),而不是默认时区:

    date_default_timezone_set('UTC');
    $dt = new DateTime("2021-03-31 23:46:14");
    $dt->setTimeZone(new DateTimeZone("Europe/paris")); // change date timezone
    echo $dt->format('m/d/Y, H:i:s');
    

    输出:

    04/01/2021, 01:46:14

    更改默认时区会影响new DateTime(),而不是format() 结果。

    【讨论】:

    • 感谢您的回答。是否可以删除date_default_timezone(因为它可能会影响其他使用代码中的日期的函数),而是在new DateTime 中设置UTC?
    • 是的,使用构造函数的第二个参数:3v4l.org/9bM5P
    【解决方案2】:

    这也可以用 date 和 strtotime 轻松解决:

    //The following line is only required if the server has a different time zone.
    //date_default_timezone_set('Europe/Paris');
    
    $utcDate = "2021-03-31 23:45:00";
    
    echo date('m/d/Y, H:i:s',strtotime($utcDate.' UTC'));
    

    输出:

    04/01/2021, 01:45:00
    

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 2016-05-22
      • 1970-01-01
      • 2012-10-29
      • 2020-02-05
      • 1970-01-01
      • 2016-12-18
      • 2012-10-07
      相关资源
      最近更新 更多