Спустя год с начала своей разработки улучшенный компонент Date/Time наконец-то появится в WordPress. Версия WordPress 5.3 будет поставляться вместе с новыми API-функциями и исправлениями старых багов.
Андрей Савченко (Rarst) взял этот проект под свой контроль и проработал большинство проблем в форке WP Date. Также он является автором проекта WPDateTime, посвященного улучшению базового компонента Date/Time.
Погружение в компонент Date/Time – настоящий подвиг. Решение одной проблемы вело к появлению других. Это кроличья нора, через которую решились пройти лишь единичные разработчики в сообществе. Некоторые ошибки сохранялись годами, и у пользователей не было какого-либо надежного решения возникающих проблем.
Самые популярные ошибки были вызваны багами в ядре, а также недочетами разработчиков вследствие проблем с совместимостью, отметил Андрей. Все это могло приводить к проблемам на стороне пользователей при планировании публикаций или при выполнении других операций, привязанных ко времени.
С выходом WordPress 5.3 все существующие функции должны работать более стабильно. Разработчики исправили несколько багов, а также обновили некорректную документацию для нескольких функций ядра. Помимо фиксов в 5.3 появятся также новые Date/Time API-функции. Обновленные API будут включать в себя унифицированные функции восстановления часового пояса, локализации и функциональной совместимости (интероперабельности) PHP.
Андрей назвал это «медленным падением в пучину сумасшествия», когда его спросили о мотивах погружения в компонент Date/Time и в его фундаментальные проблемы. «Я начал замечать серьезные ошибки в компоненте, отвечая на вопросы на WordPress Stack Exchange, и чем больше я копался в этом компоненте, тем яснее мне становилось его ужасное состояние».
Одной из главных проблем является то, как WordPress обрабатывает временные метки. «Мне пришлось придумать термин “временная метка WordPress”», – рассказал Андрей. – «В ядре для них не было названия, а встроенная документация неверно называла их “временными метками Unix”». WordPress добавляет смещение часового пояса к реальной временной метке Unix, что вызывает проблемы с PHP и внешними системами.
Временные метки WordPress не могут быть удалены из ядра без нарушения обратной совместимости. Разработчики плагинов и тем должны избегать использования временных меток WordPress; вместо этого лучше применять рекомендуемые методы, описанные в посте Андрея.
Функции даты в WordPress изначально были написаны на PHP 4 – версии PHP, которая умерла очень давно. В PHP 5.2 были представлены классы PHP DateTime и DateTimeZone, и в течение многих лет они продолжали улучшаться. Функции даты WordPress никогда ранее не обновлялись, чтобы отвечать новым стандартам. Недавнее повышение минимальной версии PHP до 5.6 означает, что теперь доступен класс DateTimeImmutable, появившийся в PHP 5.5. Подъем версии позволит внести новые API-функции в WordPress 5.3.
Некоторым багам уже больше 7 лет, как, к примеру, следующий баг с сокращенными форматами, не работающими с функцией date_i18n(). Если повезет, то в будущем ядро может использовать функции для пользовательских часовых поясов, что позволит лучше справляться с временными различиями в WordPress (к примеру, если на одном сайте работают авторы со всего мира).
Источник: wptavern.com