【问题标题】:get timezone offset from UNIX timestamp in PHP从 PHP 中的 UNIX 时间戳获取时区偏移量
【发布时间】:2018-09-11 19:17:42
【问题描述】:

在 PHP 7.2 中,如果我这样做:

<?php
$dt = new DateTime('@1522680410', new DateTimeZone(date_default_timezone_get())); 
$tz_offset = $exp->getOffset();
?>

$tz_offset 始终返回 0。但是,如果我设置日期而不是 UNIX 时间戳(即“2018-01-02”而不是“@1522680410”),它将显示正确的偏移值。

有没有办法让时间戳像上面一样一步一步返回时区偏移量?

【问题讨论】:

    标签: php datetime timezone


    【解决方案1】:

    显然你可以这样做:

    <?php
    $dt = new DateTime(DateTime::createFromFormat('U', '1522680410')->format('Y-m-d'), new DateTimeZone(date_default_timezone_get()));
    ?>
    

    【讨论】:

    • 使用此解决方案,您会浪费时间。而且您不需要将时区设置为默认值,因为已经采用默认值(第一个参数中没有时区定义)。生成两个 DateTime 对象是大材小用。
    【解决方案2】:

    Unix 时间戳始终位于 UTC 时区(或 ±00:00 偏移量)。如果没有,你正在做一些令人讨厌的事情:)

    如果你看一下DateTime::__construct(),你会看到关于第二个参数的注释:

    $time 参数是UNIX 时间戳(例如@946684800)或指定时区(例如2010-01-28T15:00:00+02:00)时,$timezone 参数和当前时区将被忽略。

    创建 DateTime 对象后更改时区:

    $dt = new DateTime('@1522680410');
    $dt->setTimezone(new DateTimeZone(date_default_timezone_get())); 
    

    【讨论】:

      猜你喜欢
      • 2010-12-04
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-06
      相关资源
      最近更新 更多