DateTime::修改和夏令时切换

2024-05-14

Using 日期时间::修改 http://php.net/manual/en/datetime.modify.php在 DST 边界上添加一个小时会导致它跳过一个小时。

e.g.

$d = new DateTime('2015-11-01 12:00:00 AM', new DateTimeZone('America/Vancouver'));
$d->modify('+1 hour'); // 1 AM
$d->modify('+1 hour'); // 2 AM
$d->modify('+1 hour'); // 3 AM

我想看两次“凌晨 1 点”(并且then“凌晨 2 点”)因为时间倒退一小时。

我怎样才能得到这种行为?


It's a bug https://bugs.php.net/bug.php?id=65811. (credit https://stackoverflow.com/questions/31974388/datetimemodify-and-dst-switch#comment51858487_31974388)

要解决此问题,请将时区更改为 UTC,然后再更改回来。

$d = new DateTime('2015-11-01 12:00:00 AM', new DateTimeZone('America/Vancouver'));

$tz = getTimezone();
$d->setTimezone(new DateTimeZone('UTC'));
$d->modify('+1 hour'); 
$d->modify('+1 hour'); 
$d->modify('+1 hour'); 
$d->setTimezone($tz);
echo $d->format('d-M-Y g:ia'); // 01-Nov-2015 2:00am
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DateTime::修改和夏令时切换 的相关文章