Ich bin ein sehr seltsames Verhalten mit DateTime
und DateInterval
Objekte zu sehen, und wollte wissen, warum es so benahm.Hinzufügen DateInterval gibt um eine Stunde Antwort auf den Azoren
Hinzufügen eines DateInterval
von 1 Tag bis zu einem DateTime
Satz um Mitternacht führt zu einem DateTime
Set 01.00 ... aber nur für einige Tage, und nur in einigen Zeitzonen.
<?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);
Ausgang:
*** 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
Es scheint this has always been a problem in PHP.
Es macht keinen Sinn für mich. Wenn ganze Datenintervalle zu ganzen Daten hinzugefügt werden, warum wird dann eine zusätzliche Stunde hinzugefügt?
Ich weiß, ich kann es umgehen, aber gibt es eine Einstellung, die ich zwicken kann, um das zu beheben?
Wenn dies der Fall ist, warum gibt es dann keine zusätzliche Stunde beim Überrollen von Sommerzeit (2017-03-12 02:00:00) innerhalb einer USA Zeitzone (https: // 3v4l .org/vaer1)? – amphetamachine