Date/Time у WordPress
Компонент Date/Time включає всі операції введення, виведення і зберігання інформації про час і дати в WordPress.
Код WP для роботи з часом і купа пов’язаних функцій написані давно, ще з версії PHP 4. У роботі таких функцій було багато недоліків і багів у версії WordPress 5.3 багато з них було виправлено. Все виправити дуже складно через зворотну сумісність.
Над кодом пов’язаним з роботою згодом у ВП, який був випущений у версії 5.3, працювали більше року. Давайте розглянемо, як зараз працюють Дата/Час і що було зроблено в WordPress 5.3. Якщо коротко, то було зроблено:
- Стабільна та коректна робота всього існуючого коду пов’язаного з датами та часом. Виправлено помилки, додано модульні тести та виправлено вбудовану
документацію для багатьох функцій. - З WP 5.3+ з’явилися нові функції Date API для зручності та сумісності з PHP.
- Поліпшено код завдяки новим можливостям PHP 5.6 (нагадаю тепер це мінімальна версія для WP).
Дивіться Формати дати та часу у WordPress .
Нові функції 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 .
Функція date_i18n() тепер вважається застарілою та працює на основі wp_date().
Взаємодія з PHP
- current_datetime() – отримує поточний час у вигляді об’єкта DateTimeImmutable .
- get_post_datetime() – отримує час посту як об’єкт DateTimeImmutable .
- get_post_timestamp() – отримує час посту як тимчасову мітку Unix –
1270995315
.
Відмова від тимчасових міток 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(), коли потрібно обробити час у часовій зоні, яка відрізняється від зони сайту).
–
Джерело: https://make.wordpress.org/core/2019/09/23/date-time-improvements-wp-5-3/