2015-08-12 5 views
5

Zastosowanie godziny DateTime::modify do dodania godziny na granicy DST powoduje, że przeskakuje o godzinę.DateTime :: modify i przełącznik DST

np.

$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 

Chcę zobaczyć "1 AM" dwukrotnie (i następnie "2 AM"), ponieważ czas wraca godzinę.

Jak mogę uzyskać to zachowanie?

+2

Wydaje mi się, że to błąd: https://bugs.php.net/bug.php?id=65811 – Rizier123

Odpowiedz

1

To jest a bug. (credit)

Aby obejść ten problem, należy zmienić strefę czasową na UTC, a następnie ponownie.

$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