Получить текущую дату/время в WordPress
В моем плагине я пытаюсь получить текущую дату/время блога в коде, но похоже, что возвращается некорректная дата/время. Когда я публикую новый пост в блоге, он показывает правильную дату/время, поэтому я не уверен, в чем проблема. Правильно ли я работаю с кодом? (Время публикации: Опубликовано: 13 февраля 2012 @ 22:45)
PHP Код
<?
$t_time = get_the_time( __( 'Y/m/d g:i:s A' ) ); // Получаем время поста
echo "<h1>ВРЕМЯ БЛОГА</h1>";
echo $t_time . "<br>";
echo "<br>";
echo "<h1>ВРЕМЯ СЕРВЕРА</h1>";
echo date("Y/m/d g:i:s A");
?>
ВЫВОД ВРЕМЯ БЛОГА 2011/05/20 10:28:16 PM
ВРЕМЯ СЕРВЕРА 2012/02/14 5:41:35 AM

В WordPress есть функция под названием current_time();
, в которую вы передаёте либо 'timestamp', либо 'mysql', и она возвращает время.
Подробнее: https://developer.wordpress.org/reference/functions/current_time/

+1. Я бы добавил, что WordPress принудительно устанавливает часовой пояс сервера в UTC, поэтому следует использовать функции WordPress (так как они учитывают это), а не нативные функции PHP.

Начиная с WordPress 5.3, использование current_time( 'timestamp' )
больше не рекомендуется. Если вам необходимо получить время с учетом часового пояса сайта, рекомендуется использовать следующие функции:
1. current_datetime()
2. time()
3. get_post_datetime()
4. get_post_timestamp()
Почему это изменение?
Компонент даты/времени ранее полагался на WordPress timestamp (до WordPress 5.3), что вызывало множество ошибок и ограничений при работе с актуальными версиями PHP.
Подробная информация здесь: https://make.wordpress.org/core/2019/09/23/date-time-improvements-wp-5-3/

Код
Актуальный (2020) правильный код для отображения полной даты и времени в локализованном виде через новую функцию ядра WordPress wp_date()
:
echo wp_date( get_option( 'date_format' ), get_post_timestamp() )
. wp_date( get_option( 'time_format' ), get_post_timestamp() );
Этот относительно короткий фрагмент кода:
- соблюдает запрошенные параметры форматирования даты и времени из настроек WordPress
- выполняет соответствующие переводы
- применяет правильный часовой пояс из настроек
- считается лучшей практикой в 2021 году и далее.
Обоснование
С выходом wp_date()
в WordPress 5.3 (2019), WordPress значительно продвинулся в исправлении запутанного и нерабочего способа обработки времени, в частности проблемы, когда временные метки WordPress не совпадали с Unix-метками (значение time()), но имели добавленное смещение часового пояса. Путаница возникала из-за того, что в Unix-мире вывод time() (так называемая "Unix-метка времени") исторически всегда был в формате GMT, и усугублялась использованием термина "Unix-метка времени" для описания этих "меток времени WordPress". Новая функция wp_date()
выполняет локализацию, которая обычно требуется, и корректно работает с предоставленными значениями временных меток GMT.
Обратите внимание, что использование PHP-функции date_default_timezone_set()
для установки часового пояса сайта (кроме локального) по-прежнему будет ломать WordPress, но теперь есть хорошие альтернативы, которые работают так, как ожидается. Стоит отметить, что использование date_default_timezone_set()
теперь определяется в "Здоровье сайта" как "критическое", поскольку это нарушает обработку времени в WordPress и некоторых плагинах; если вы используете его в старом коде, вам следует удалить его как можно скорее и заменить использование date()
на wp_date()
.
Документация
Более полное введение в новые функции даты и времени, написанное командой, разработавшей новый код, находится здесь: https://make.wordpress.org/core/2019/09/23/date-time-improvements-wp-5-3/
Обратите внимание, что некоторые новые функции возвращают объекты PHP DateTimeImmutable
, что значительно упрощает работу. Кроме того, все функции, перечисленные в связанном введении, теперь являются частью ядра и, следовательно, имеют страницы в стандартной документации PHP.
Также там есть заметки о том, что использовать, а что нет (хотя на данный момент там отсутствуют примеры кода).
