WordPress как на ладони
wordpress jino

human_time_diff() WP 1.5.0

Определяет разницу между двумя переданными метками времени и возвращает результат в формате удобном для чтения: 1 минута, 5 часов, 10 дней, 3 месяца, 1 год (1 min, 5 hours, 10 days).

Функции предается время в формате timestamp (метка времени Unix). Такую метку можно получить с помощью функций: current_time('timestamp'), get_post_time('U') и других функций времени.

✈ 1 раз = 0.000064с = очень быстро | 50000 раз = 0.83с = очень быстро
Хуки из функции:
Возвращает

Строку. Человеко-понятную разницу времени.

Использование

human_time_diff( $from, $to );
$from(число) (обязательный)
Метка времени Unix - время с которого будет считаться разница. Это может быть дата записи: get_post_time('U').
$to(число)
Метка времени Unix - время до которого будет считаться разница. По умолчанию указывается текущее время time().
По умолчанию: ''

Примеры

#1 Прошло времени с момента публикации записи

Этот пример показывает как вывести время, которое прошло с момента публикации записи. Используется в Цикле WordPress:

$time_diff = human_time_diff( get_post_time('U'), current_time('timestamp') );
echo "Опубликовано $time_diff назад.";
//> Опубликовано 5 лет назад.

Мы указали второй параметр current_time('timestamp') для того чтобы передать метку времени в одинаковом часовом поясе с get_the_time(). Часовой пояс указывается в настройках WordPress. Все встроенные функции WordPress ориентируются на часовой пояс, в том числе и current_time(). Поэтому если не указать второй параметр, то по умолчанию будет использована функция PHP time(), которая получит метку времени в стандартной зоне GMT без поправки на, указанный в настройках WP, часовой пояс, а значит результат может быть не правильным.

Другими словами, в human_time_diff() нужно указывать время в одном часовом поясе.

#1.2 Времена в стандарте GMT:

$human_time = human_time_diff( get_post_time( 'U', true ) );
echo "Опубликовано $human_time назад.";

Здесь get_post_time( 'U', true ), выведет значение поля записи post_date_gmt, а не post_date. А второй параметр мы не указали потому что time() по умолчанию получает gmt время.

#2 Прошло времени с момента публикации комментария

Этот пример аналогичный предыдущему, только для комментариев:

$time_diff = human_time_diff( get_comment_time('U'), current_time('timestamp') );
echo "Опубликовано $time_diff назад.";

#3 Ограничение работы функции до ближайшего месяца

По умолчанию human_time_diff() будет выводить и месяцы и годы. Ограничим разницу до месяца, если разница выше, то будем выводить время в обычном формате 5 января 2014:

$time_diff = human_time_diff( get_comment_time('U'), current_time('timestamp') );

if( preg_match('~month|year|месяц|год|лет~iu', $time_diff ) )
	echo "Опубликовано: ". get_the_time();
else
	echo "Опубликовано $time_diff назад.";

Код human time diff: wp-includes/formatting.php WP 4.8.2

<?php
function human_time_diff( $from, $to = '' ) {
	if ( empty( $to ) ) {
		$to = time();
	}

	$diff = (int) abs( $to - $from );

	if ( $diff < HOUR_IN_SECONDS ) {
		$mins = round( $diff / MINUTE_IN_SECONDS );
		if ( $mins <= 1 )
			$mins = 1;
		/* translators: Time difference between two dates, in minutes (min=minute). 1: Number of minutes */
		$since = sprintf( _n( '%s min', '%s mins', $mins ), $mins );
	} elseif ( $diff < DAY_IN_SECONDS && $diff >= HOUR_IN_SECONDS ) {
		$hours = round( $diff / HOUR_IN_SECONDS );
		if ( $hours <= 1 )
			$hours = 1;
		/* translators: Time difference between two dates, in hours. 1: Number of hours */
		$since = sprintf( _n( '%s hour', '%s hours', $hours ), $hours );
	} elseif ( $diff < WEEK_IN_SECONDS && $diff >= DAY_IN_SECONDS ) {
		$days = round( $diff / DAY_IN_SECONDS );
		if ( $days <= 1 )
			$days = 1;
		/* translators: Time difference between two dates, in days. 1: Number of days */
		$since = sprintf( _n( '%s day', '%s days', $days ), $days );
	} elseif ( $diff < MONTH_IN_SECONDS && $diff >= WEEK_IN_SECONDS ) {
		$weeks = round( $diff / WEEK_IN_SECONDS );
		if ( $weeks <= 1 )
			$weeks = 1;
		/* translators: Time difference between two dates, in weeks. 1: Number of weeks */
		$since = sprintf( _n( '%s week', '%s weeks', $weeks ), $weeks );
	} elseif ( $diff < YEAR_IN_SECONDS && $diff >= MONTH_IN_SECONDS ) {
		$months = round( $diff / MONTH_IN_SECONDS );
		if ( $months <= 1 )
			$months = 1;
		/* translators: Time difference between two dates, in months. 1: Number of months */
		$since = sprintf( _n( '%s month', '%s months', $months ), $months );
	} elseif ( $diff >= YEAR_IN_SECONDS ) {
		$years = round( $diff / YEAR_IN_SECONDS );
		if ( $years <= 1 )
			$years = 1;
		/* translators: Time difference between two dates, in years. 1: Number of years */
		$since = sprintf( _n( '%s year', '%s years', $years ), $years );
	}

	/**
	 * Filters the human readable difference between two timestamps.
	 *
	 * @since 4.0.0
	 *
	 * @param string $since The difference in human readable text.
	 * @param int    $diff  The difference in seconds.
	 * @param int    $from  Unix timestamp from which the difference begins.
	 * @param int    $to    Unix timestamp to end the time difference.
	 */
	return apply_filters( 'human_time_diff', $since, $diff, $from, $to );
}

Cвязанные функции

Из раздела: Дата/время

human_time_diff 1 комментарий
  • Tefacto cайт: tfacts.ru

    Здравствуйте. А как вывести дату в днях со дня регистрации пользователя?

Здравствуйте, !

Ваш комментарий