Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Как сделать нормальный вывод даты?

Как сделать нормальный вывод даты?


     04.09.2020    dle 14    Все вопросы » Общие вопросы    133

вопрос
Привет ребята, есть установленный хак PrettyDate и он выводит 18 часов и 49 минут назад или 2 дня и 18 часов назад, как сделать что бы он выводил только 18 часов и 2 дня ?

Сам код хака

<?php
if( ! defined( 'DATALIFEENGINE' ) ) {	die( "Hacking attempt!" );	}

function plural($n, $plurals) {
	$plural =
		($n % 10 == 1 && $n % 100 != 11 ? 0 :
		($n % 10 >= 2 && $n % 10 <= 4 &&
		($n % 100 < 10 or $n % 100 >= 20) ? 1 : 2));
	return $plurals[$plural];
}


function relativeTime($dt, $precision = 2) {
	$times = array(
		365*24*60*60    =>  array("год", "года", "лет"),
		30*24*60*60     =>  array("месяц", "месяца", "месяцев"),
		7*24*60*60      =>  array("неделю", "недели", "недель"),
		24*60*60        =>  array("день", "дня", "дней"),
		60*60           =>  array("час", "часа", "часов"),
		60              =>  array("минуту", "минуты", "минут"),
	);

	$diff = time() - $dt;

	if($diff < 60)	$output='меньше минуты';
	else {
		$output = array();
		$exit = 0;

		foreach($times as $period => $name) {

			if($exit >= $precision || ($exit > 0 && $period < 60)) break;
				$result = floor($diff / $period);

				if ($result > 0) {
						if($result == 1) $output[] = plural($result, $name);
						else $output[] = $result . ' ' . plural($result, $name);

						$diff -= $result * $period;
						$exit++;
				} else if ($exit > 0) $exit++;
		}
		if ($precision < 3) $sep = " и "; else $sep = ", ";

		$output = implode($sep, $output);
	}
	return $output;
}

?>

Ответа пока нет


12 комментариев

UsurpatorVaticana
Юзер

UsurpatorVaticana - 6 сентября 2020 01:01 -

Попробуй
Найти: $output = implode($sep, $output);
Перед этим добавить: $output = array_pop($output);

Pupkin
Юзер

Pupkin - 6 сентября 2020 09:34 -

Теперь выводит только слово "Назад" и больше ничего )

UsurpatorVaticana
Юзер

UsurpatorVaticana - 6 сентября 2020 15:13 -

Добавь там же var_dump($output); и скинь сюда что выведет

Pupkin
Юзер

Pupkin - 6 сентября 2020 15:56 -

string(13) "56 минут" назад

добавил вот так

$output = array_pop($output);
      var_dump($output);
      
		$output = implode($sep, $output);
	}
	return $output;
}

UsurpatorVaticana
Юзер

UsurpatorVaticana - 6 сентября 2020 16:26 -

А где
он выводит 18 часов и 49 минут назад или 2 дня и 18 часов назад

Pupkin
Юзер

Pupkin - 6 сентября 2020 16:32 -

В краткой, полной новости и в комментариях, везде так

UsurpatorVaticana
Юзер

UsurpatorVaticana - 6 сентября 2020 16:40 -

Убери $output = array_pop($output);
Сделай только var_dump($output);
$output = implode($sep, $output);

Pupkin
Юзер

Pupkin - 6 сентября 2020 16:43 -

array(2) { [0]=> string(13) "15 часов" [1]=> string(15) "42 минуты" } 15 часов и 42 минуты назад

UsurpatorVaticana
Юзер

UsurpatorVaticana - 6 сентября 2020 16:47 -

Конец кода замени на:
		if ($precision < 3) $sep = " и "; else $sep = ", ";

		if($output[2]) $new_out = $output[0] . ' и ' . $output[1]; else  $new_out = $output[0];
	}
	return $new_out;

Pupkin
Юзер

Pupkin - 6 сентября 2020 16:51 -

Вроде получилось, сейчас выводится так, день назад, 2 дня назад, а можно сделать за место один день назад, 1 день назад ?

UsurpatorVaticana
Юзер

UsurpatorVaticana - 6 сентября 2020 16:56 -

Найти:
if($result == 1) $output[] = plural($result, $name);
else $output[] = $result . ' ' . plural($result, $name);
Заменить:
$output[] = $result . ' ' . plural($result, $name);

Pupkin
Юзер

Pupkin - 6 сентября 2020 16:58 -

Спасибо, все отлично

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх