2015-08-12 10 views
5

L'utilizzo di DateTime::modify per aggiungere un'ora attraverso un limite di ora legale provoca il salto di un'ora.DateTime :: modifica e DST switch

ad es.

$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 

voglio vedere "01:00" due volte (e quindi "2:00"), perché il tempo va indietro di un'ora.

Come posso ottenere questo comportamento?

+2

Sembra un bug per me: https://bugs.php.net/bug.php?id=65811 – Rizier123

risposta

1

È a bug. (credit)

Per aggirare il problema, modificare il fuso orario in UTC e quindi di nuovo indietro.

$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 
Problemi correlati