В обсуждении ребята подняли вопрос об учёте часовых поясов в функции из поста выше.
time_diff_ms() корректно учитывает временные зоны, так как сравнивает абсолютные метки времени, а не время настенных часов (wall-clock time).
Попутно мы выяснили, что метод
Добавил в Gist тесты для всех сценариев создания объекта времени.
https://gist.github.com/vudaltsov/0bb623b9e2817d6ce359eb88cfbf229d#file-time_diff_ms_test-php
time_diff_ms() корректно учитывает временные зоны, так как сравнивает абсолютные метки времени, а не время настенных часов (wall-clock time).
Попутно мы выяснили, что метод
DateTime(Immutable)::setTimezone()
не изменяет абсолютное время, просто адаптирует время настенных часов под часовой пояс. Метка времени до и после setTimezone()
остаётся такой же. Смотрите также комментарий к документации метода.Добавил в Gist тесты для всех сценариев создания объекта времени.
https://gist.github.com/vudaltsov/0bb623b9e2817d6ce359eb88cfbf229d#file-time_diff_ms_test-php