从PHP中的UNIX时间戳获取时区偏移量

时间:2018-04-02 14:53:23

标签: php datetime timezone

在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'),则会显示正确的偏移值。

有没有办法让时间戳像上面那样在一个步骤中返回时区偏移?

2 个答案:

答案 0 :(得分:1)

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

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

  

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

创建DateTime对象后更改时区:

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

答案 1 :(得分:0)

显然你可以这样做:

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