Є кілька варіантів, жоден з яких насправді не працює чудово. Це помилка WordPress, і вона справді гасить, тому що час не в тому випадку, якщо ви не встановите на своєму веб-сайті UTC ... що заплутано і не завжди навіть можливо.
Наступний код, я думаю, працює лише в тому випадку, якщо ви вибрали часовий пояс (у розділі Налаштування -> Загальне в адміністраторі) як назване місто замість зміщення номера GMT. Я не перевіряв цього, але дуже можливо, що get_option('gmt_offset')
він встановлюється, коли get_option('timezone_string')
його немає.
date_default_timezone_set(get_option('timezone_string'));
Мінус цього полягає в тому, що WordPress передбачає, що PHP встановлений на UTC під час створення часових міток mysql, тож ви можете трохи плутати вашу базу даних при кожному переключенні часових поясів! Не кажучи вже про інші плагіни WP, можна припустити, що середовище PHP завжди знаходиться в UTC.
Отже, якщо ви просто бажаєте правильного часу - ви можете змусити свою часову позначку бути в UTC за допомогою:
get_post_time('c', true); //should work for non-post objects.
На жаль, хоча це правильно, це змусить встановити часовий пояс на UTC.
І зауважте , що ви не можете одночасно використовувати «істинний» прапор і функцію в timezone_set по замовчуванням.
Будь-яке правильне рішення буде фрагментом коду, який обчислює gmt_offset
І І, timezone_string
і використовує їх для встановлення часового поясу на деякий вхід. WP передбачає, що PHP встановлений на UTC, коли роблять часові позначки mysql, і він може порушити інші плагіни.
Є одне таке рішення на https://www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/, але, знову ж таки, це помилка, тому вам слід використовувати get_post_time($date_format, TRUE)
код, щоб отримати позначку часу, яка насправді правильно.