Я наткнулся на странную вещь в PHP. Находясь в часовом поясе Europe/Oslo
, я вычитал один час из метки времени 2020-03-29 03:00:00
(это именно то время, когда происходит сдвиг времени Dailight Savings Time), и это привело к точно такой же метке времени 2020-03-29 03:00:00
! Это должно было привести к 2020-03-29 01:00:00
. Почему это не так?
Вплоть до 2020-03-29 03:59:59
он возвращает точно такую же метку времени при вычитании одного часа (пробовал и sub()
, и modify()
). В следующую секунду после этого он правильно дает 2020-03-29 03:00:00
.
Вы можете воспроизвести это следующим образом:
date_default_timezone_set('Europe/Oslo');
echo (new \DateTime('2020-03-29 03:00:00'))->sub(new \DateInterval('PT1H'))->format('Y-m-d H:i:s');
Я тестировал это в PHP 7.1.33, 7.3. 10 и 7.3.18.
PS. Однако добавление 1 часа к 2020-03-29 01:00:00
дает 2020-03-29 03:00:00
.