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