Php 在亚速尔群岛,加上DateInterval可以给出一小时的答案

Php 在亚速尔群岛,加上DateInterval可以给出一小时的答案,php,datetime,timezone,dateinterval,Php,Datetime,Timezone,Dateinterval,我在DateTime和DateInterval对象中看到了一种非常奇怪的行为,我想知道为什么会这样 将一天的DateInterval添加到午夜设置的DateTime会导致DateTime设置为凌晨1:00。。。但仅限于某些日期,也仅限于某些时区 <?php $timezone1 = 'Atlantic/Azores'; $timezone2 = 'America/Chicago'; function testZone($tz) { printf("*** time zone: %

我在
DateTime
DateInterval
对象中看到了一种非常奇怪的行为,我想知道为什么会这样

将一天的
DateInterval
添加到午夜设置的
DateTime
会导致
DateTime
设置为凌晨1:00。。。但仅限于某些日期,也仅限于某些时区

<?php
$timezone1 = 'Atlantic/Azores';
$timezone2 = 'America/Chicago';

function testZone($tz) {
    printf("*** time zone: %s ***\n", $tz);
    date_default_timezone_set($tz);
    $oneday = DateInterval::createFromDateString('1 day');

    $day = new DateTime('2016-03-26 00:00:00');
    printf("Before:\t\t\t%s\n", $day->format('Y-m-d H:i:s'));
    $day->add($oneday);
    printf("After adding one day:\t%s\n", $day->format('Y-m-d H:i:s'));

    $day = new DateTime('2016-03-25 00:00:00');
    printf("Before:\t\t\t%s\n", $day->format('Y-m-d H:i:s'));
    $day->add($oneday);
    printf("After adding one day:\t%s\n", $day->format('Y-m-d H:i:s'));
}

testZone($timezone1);
testZone($timezone2);

之所以会发生这种情况,是因为葡萄牙的夏季时间正好从2016-03-27开始

如果你懂葡萄牙语,你可以阅读:

奥托诺马多萨雷斯地区

他们遵守法律,遵守法律 Açores:

阿迪安塔达60分钟法律节奏时间(协调世界时1小时)为27分钟,阿特拉萨达60分钟,法律节奏时间(协调世界时1小时)为30分钟


如果是这样,为什么呢?
*** time zone: Atlantic/Azores ***
Before:                 2016-03-26 00:00:00
After adding one day:   2016-03-27 01:00:00 <~~ 1 AM!
Before:                 2016-03-25 00:00:00
After adding one day:   2016-03-26 00:00:00
*** time zone: America/Chicago ***
Before:                 2016-03-26 00:00:00
After adding one day:   2016-03-27 00:00:00
Before:                 2016-03-25 00:00:00
After adding one day:   2016-03-26 00:00:00