2015-10-28 7 views
2

В прошлый уик-энд у нас был конец DST, и часы были повернуты назад на 1 час. Я обнаружил странное поведение DateTime :: diff(), когда дата сравнения находится в разное время: весеннее время и зимнее время.DateTime :: diff и конец летнего времени

new DateTime('2015-10-28 12:50:00')->diff(new DateTime('2015-10-19 13:20:00')) 

result = {DateInterval} [15] 
    y = 0 
    m = 0 
    d = 9 
    h = -1 # negative hour! 
    i = 30 
    s = 0 

, когда разница больше, чем один час everythin нормально:

new DateTime('2015-10-28 12:50:00')->diff(new DateTime('2015-10-19 14:20:00')) 

result = {DateInterval} [15] 
    y = 0 
    m = 0 
    d = 8 
    h = 22 
    i = 30 
    s = 0 

Любые идеи, как это исправить? Это ошибка в PHP?

ответ

2

Да, это ошибка, с которой PHP в настоящее время не обрабатывает переходы DST. Отчеты об ошибках #51051 (по-прежнему открыт) и #55253 (исправлено в PHP 5.3.9) описывают проблемы, с которыми вы сталкиваетесь. Лучшей практикой является выполнение всех ваших расчетов дат в UTC, что позволяет избежать этой проблемы. См. Это post для получения дополнительной информации