使用DateTime::modify在DST边界上添加一个小时会导致跳过一个小时。

例如

$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点”(然后是“凌晨2点”),因为时间倒流了一个小时。

我如何获得这种行为?

最佳答案

这是a bug。 (credit)

要解决此问题,请将时区更改为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

关于php - DateTime::modify和DST切换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31974388/

10-09 16:02