代码之家  ›  专栏  ›  技术社区  ›  Blackbam

如何在PHP中将不带时区的iso8601时间戳转换为带时区的iso8601时间戳?

  •  0
  • Blackbam  · 技术社区  · 6 年前

    我的时间戳是这样的:

    $timestamp = "2018-08-28T08:49:44+00:00";
    

    易于将其转换为unix时间戳:

    $unixtime = strtotime($timestamp);
    echo $unixtime; // result: 1535446184
    

    我想要的结果是得到我当前时区的带有时区的时间戳。应该是这样的:

    $timestamp_with_timezone = "2018-08-28T10:49:44+02:00";
    

    但是如果我这样做了:

    echo date('c',$unixtime);
    

    结果是:

    2018-08-28T08:49:44+00:00
    

    2 回复  |  直到 6 年前
        1
  •  3
  •   Blackbam    6 年前

    使用 DateTime 班级:

    // DateTime automatically parses this format, no need for DateTime::createFromFormat()
    $date = new DateTime("2018-08-28T08:49:44+00:00");
    
    // Set the timezone (mine here)
    $date->setTimezone(new DateTimeZone('Europe/Paris'));
    
    // Output: 2018-08-28T10:49:44+02:00
    echo $date->format('c');
    

        2
  •  1
  •   Tom    6 年前

    您可以设置DateTime对象的时区:

    $timestamp = "2018-08-28T08:49:44+00:00";
    
    $date = date_create($timestamp);
    
    $date->setTimezone(new DateTimeZone('Europe/Amsterdam'));
    
    echo date_format($date, 'Y-m-d H:i:sP') . "\n";