2017-05-17 2 views
0

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?

Antwort

0

Das passiert, weil Portugiesisch Sommerzeit genau auf 2016-03-27 beginnt.

Wenn Sie Portugiesisch verstehen, können Sie lesen:

http://oal.ul.pt/hora-legal/mudanca-da-hora/

Região Autónoma dos Açores

Em-konform com a legislação, ein hora Rechts na Região Autónoma dos Açores:

será adiantada 60 minuten à 0 horas de tempo legal (1 Stunde UTC) tun dia 27 de Março e atrasada 60 minuten à 1 hora de tempo legal (1 Stunde UTC) tun dia 30 de Outubro.

+0

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

Verwandte Themen