human_time_diff() WP 1.5.0

Визначає різницю між двома переданими мітками часу і повертає результат у зручному для читання форматі: 1 хвилина, 5 годин, 10 днів, 3 місяці, 1 рік (1 min, 5 hours, 10 days). Відносні дати.

Функції передається час у форматі timestamp (мітка часу Unix). Таку мітку можна отримати за допомогою функцій: get_post_time(‘U’) та інших функцій часу.

1 раз – 0.00003 сек
(дуже швидко) | 50000 разів – 0.12 сек
(дуже швидко) |
PHP 7.4.8, WP 5.6.1

Хуки з функції

Повертає

Строку. Людсько-зрозумілу різницю часу.

Використання

human_time_diff ($ from, $ to);
$from
(число) (обов’язковий)
Мітка часу Unix – час з якого вважатиметься різниця. Це може бути дата запису:
get_post_time(‘U’) .
$to
(число)
Мітка часу Unix – час до якого вважатиметься різниця.


Типово: 0 – time()

Приклади

0

#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() потрібно вказувати час в одному часовому поясі.

0

#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 час.

0

#3 Пройшло часу з моменту публікації коментаря

Цей приклад аналогічний до попереднього, тільки для коментарів:

$time_diff = human_time_diff( get_comment_time('U'), current_time('timestamp') );
echo "Опубліковано $time_diff тому.";
0

#4 Обмеження роботи функції до найближчого місяця

За умовчанням 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 тому.";
0

#5 Секунди у людському форматі

Допустимо нам треба перетворити (конвертувати) секунди на зрозумілий формат:

echo human_time_diff(0, 600); // 10 min
echo human_time_diff(0, 6000); // 2 години
echo human_time_diff(0, 60000); // 17 hour
echo human_time_diff(0, 600000); // 7 day

список змін

З версії 1.5.0Введено.
З версії 5.3.0Added support for showing a difference in seconds.

Код human_time_diff() WP 6.0.2

function human_time_diff( $from, $to = 0 ) {
	if (empty($to)) {
		$to = time();
	}

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

	if ( $diff < MINUTE_IN_SECONDS ) {
		$secs = $diff;
		if ( $secs <= 1 ) {
			$ secs = 1;
		}
		/* translators: Time difference між two dates, in seconds. %s: Number of seconds. */
		$since = sprintf( _n( '%s second', '%s seconds', $secs ), $secs );
	} elseif ( $diff < HOUR_IN_SECONDS && $diff >= MINUTE_IN_SECONDS ) {
		$ mins = round ($ diff / MINUTE_IN_SECONDS);
		if ( $mins <= 1 ) {
			$ mins = 1;
		}
		/* translators: Time difference між two datas, in minutes (min=minute). %s: 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 між two dates, in hours. %s: 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 між two dates, in days. %s: 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 між two datas, in weeks. %s: 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 між two datas, in months. %s: 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 між two dates, in years. %s: Number of years. */
		$since = sprintf( _n( '%s year', '%s years', $years ), $years );
	}

	/**
	 * Filters human readable difference між двома timestamps.
	 *
	 * @ Since 4.0.0
	 *
	 * @param string $since Відмінність в людському тексті readable.
	 * @param int $diff The difference in seconds.
	 * @param int $from Unix timestamp from which the difference begins.
	 * @param int $to Unix timestamp до кінця терміну difference.
	 */
	return apply_filters( 'human_time_diff', $since, $diff, $from, $to);
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *