Date/Time в WordPress

Click here to view original web page at wp-kama.ru

Компонент Date/Time включает в себя все операции ввода, вывода и хранения информации о времени и дате в WordPress. Код написан давно еще в версии PHP 4, с тех пор было много изменений, самые значительные из них были в WordPress 5.3.

Давайте рассмотрим как сейчас работают Дата/Время и что было сделано в WordPress 5.3. Если коротко, то было сделано:

  1. Стабильная и корректная работа всего существующего кода связанного с датами и временем. Исправлены ошибки, добавлены модульные тесты и исправлена встроенная
    документация для многих функций.

  2. С WP 5.3+ появились новые функции Date API для удобства и совместимости с PHP.

  3. Улучшен код благодаря новым возможностям PHP 5.6 (напомню теперь это минимальная версия для WP).

Новые функции API

Единый способ получения часового пояса

  • wp_timezone_string() - единый способ получения часового пояса сайта, независимо от настроек (опции timezone_string/gmt_offset).

    Функция вернет строку Region/Location, например Asia/Tashkent или строку вида ±NN:NN, например +02:00. Оба варианта действительны для версий PHP.

  • wp_timezone() извлекает часовой пояс сайта в виде объекта DateTimeZone.

Новая локализация даты

  • wp_date() - основная функция - это полная переработка локализации даты в WordPress. Она работает с временными метками Unix и объектами PHP time zone, например DateTimeZone.

Взаимодействие с PHP

Отказ от временных меток WP

WP Date/Time API полагался на так называемую "временную метку WordPress" - WP timestamps - сумму временной метки Unix со смещением часового пояса. Это вызывало множество ошибок и отсутствие совместимости с предыдущими версиями PHP или любыми внешними системами. В документации ошибочно говорилось о метках Unix, когда на самом деле использовались метки WP timestamps.

Невозможно удалить метки WP без нарушения обратной совместимости. Но разработчики достигли значительного прогресса, чтобы:

  • сократить их использование в ядре;
  • исправить некорректную документацию;
  • предложить новый API, использующий настоящие временные метки Unix.

Таким образом с версии WP 5.3:

Не рекомендуется:

  • НЕ получайте время как метка WP timestamps (метка времени + сдвижка времени сайта):

  • НЕ локализуйте время/дату функцией:

  • НЕ сохраняйте на постоянной основе WP timestamps.

  • НЕ сравнивайте WP timestamp'ы.

  • НЕ изменяйте временную зону PHP с помощью функции date_default_timezone_set() - это важное требование для правильной работы ядра.

Рекомендуется:

  • Получайте время как Unix timestamp (метка времени Unix без сдвижки) или как объект DateTimeImmutable:

  • Локализуйте время/дату базируясь на Unix timestamp:

  • Сохраняйте Unix timestamps или форматы, которые точно указывают момент времени, например DATE_RFC3339.

  • Сравнивайте метки времени Unix, объекты DateTimeImmutable или строковые даты в единой временной зоне.

  • Используйте объекты: DateTimeZone и DateTimeImmutable с функцией wp_date(), когда нужно получить время во временной зоне отличной от зоны сайта).

--