在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'),则会显示正确的偏移值。
有没有办法让时间戳像上面那样在一个步骤中返回时区偏移?
答案 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()));
?>