Функция human_time_diff()
позволяет получить разницу между двумя заданными отметками во времени, в удобном для восприятия формате, например 5 минут, 10 часов, 9 дней и т.д.
Такое отображение часто встречается вместо даты публикации в различных социальных сетях, например Twitter и Facebook. Это позволяет читателям быстрее понять «свежесть» контента, не задумываясь о том, какое сегодня число.
Подобное отображение все чаще и чаще стало встречаться и в темах для WordPress. Это позволяет легко реализовать встроенная функция human_time_diff()
.
Аргументы
Функция human_time_diff()
принимает всего два аргумента:
$from
— обязательный аргумент, начало временного диапазона$to
— конец временного диапазона, используется текущее время по умолчанию
В обоих аргументах используется время в формате timestamp (отметка времени) — количество секунд с 1 января 1970 года. Значения в таком формате позволяют получить встроенные функции PHP time()
и mktime()
, а также встроенные функции WordPress get_the_time()
и current_time()
.
Функция human_time_diff()
возвращает разницу между двумя отметками в виде количества секунд, минут, часов, дней, недель, месяцев или лет. Например:
echo human_time_diff( time() - 60 ); // 1 минута echo human_time_diff( time() - 3600 ); // 1 час echo human_time_diff( time() - 259200 ); // 3 дня
Обратите внимание, что в данных примерах не задан второй аргумент $to
. В этом случае WordPress использует отметку текущего времени с помощью функции time()
.
Примеры human_time_diff()
Рассмотрим простой пример, который в цикле записей темы WordPress выводит время ее публикации в формате human_time_diff
:
while ( have_posts() ) { the_post(); // ... вывод заголовка, контента и т.д. $human_time = human_time_diff( get_the_time( 'U' ), current_time( 'timestamp' ) ); printf( 'Опубликовано %s назад.', $human_time ); }
Функция get_the_time()
позволяет получить отметку времени опубликованной записи, в требуемом нам формате, но учтите что данная функция использует настройки часового пояса, которые можно изменить в разделе Параметры → Общие в панели администрирования WordPress.
Именно поэтому мы указали второй аргумент к функции human_time_diff()
и воспользовались встроенной функцией WordPress current_time()
, которая также принимает во внимание настройки часового пояса, в отличие от функции по умолчанию time()
.
Иными словами, убедитесь, что оба значения передаваемые в human_time_diff()
находятся в одном часовом поясе. Вы можете также использовать функцию get_post_time()
вместо get_the_time()
. Она позволяет получить отметку времени в часовом поясе GMT/UTC:
$human_time = human_time_diff( get_post_time( 'U', true ) );
Здесь можно не указывать второй аргумент к функции human_time_diff()
поскольку по умолчанию используется функция time()
, которая также возвращает отметку времени в часовом поясе GMT/UTC.
Многие поисковые роботы уделяют отдельное внимание дате публикации записей, а форматы вида «х дней назад» они не воспринимают, поэтому для поисковой оптимизации часто используется микроразметка. Например:
$human_time = human_time_diff( get_post_time( 'U', true ) ); $iso8601_time = get_the_time('c'); printf( '<span class="entry-date published" datetime="%s">Опубликовано %s назад.</span>', $iso8601_time, $human_time );
Таким образом посетители сайта будут видеть дату в удобном для них формате human_time_diff
, а поисковые системы смогут прочитать дату в формате ISO 8601 в микроразметке.
Последний пример — вывод даты в формате human_time_diff
только если статья была опубликована менее недели назад:
$human_time = human_time_diff( get_post_time( 'U', true ) ); $regular_time = get_the_time( get_option( 'date_format' ) ); $output_time = sprintf( '%s назад', $human_time ); if ( time() > get_post_time( 'U', true ) + 7 * DAY_IN_SECONDS ) $output_time = $regular_time; printf( 'Опубликовано %s.', $output_time );
Если с момента публикации статьи прошло больше 7 дней (см. константы для работы со временем), то данный код выведет дату в формате, который установлен в настройках сайта.
Реализацию функции human_time_diff()
можно посмотреть в файле wp-includes/formatting.php. Она использует функции локализации и при наличии русского пакета переводов для WordPress, хорошо справляется с формами множественных чисел (1 день, 2 дня, 5 дней). Подробнее о функциях get_the_time()
и get_post_time()
вы можете прочитать в кодексе.