Сколько времени назад
Code (php)
-
-
<?
-
/*******************************************************************
-
Принимает: дату в формате Unix timestamp и двоичное значение режима $sharp.
-
$sharp принимает значения:
-
true - точный режим: будут выведены все интервалы времени, например:
-
22 года и 4 месяца и 2 недели и 6 дней и 18 часов и 29 минут и 58 секунд назад
-
-
false - неточный режим: будут выведены один или два ненулевых интервала:
-
22 года назад
-
2 месяца и 3 недели
-
*/
-
-
function om_ago($time,$sharp = false)
-
{
-
if(!$time) return "никогда!";
-
-
//Массив склонений для чисел от 0 до 5
-
-
//Обозначения числительных для разных периодов года
-
);
-
-
//Количество секунд в году, месяце, неделе, дне, часе, минуте, секунде
-
-
//Число секунд между указанным и настоящим временем
-
-
if($time==0) return "сейчас";
-
-
//Определяем, в прошлом или в будущем лежит указанная дата
-
$past = $time>0;
-
-
-
//Выходная строка
-
$out = "";
-
-
//Число ненулевых интервалов времени
-
//При "неточном режиме" не превышает двух
-
$count = 0;
-
-
//Для всех интервало времени
-
for($i=0;$i<count($seconds);$i++)
-
{
-
//Делим на количество секунд в текущем промежутке времени
-
//и получаем интервал между датами в соответствующих единицах
-
-
//Остаток от деления оставляем на следующий цикл
-
$time %= $seconds[$i];
-
-
if($interval>0)
-
{
-
//Разделитель
-
$pref = ($count==0) ? "" : " и ";
-
-
//Выбираем падеж и число для выбранного интервала
-
-
//Составляем собственно строчку
-
$out .= "$pref$interval $string";
-
-
$count++;
-
-
//Если в "неточном режиме" интервал больше двух, то останавливаем цикл.
-
//Например, если прошло 3 года, то количество месяцев значения уже не имеет.
-
if($interval>2 && !$sharp) break;
-
}
-
else //В "неточном режиме", если мы уже набрали один интервал и сделующий равен нулю, то останавливаем цикл.
-
//Однако, если после месяца идёт 0 недель, то мы всё же напишем интервал в днях. т.е. 1 месяц и 4 дня.
-
if(!$sharp && $count>0 && $i!=2) break;
-
-
//Если в "неточном режиме" мы уже набрали два интервала, то останавливаем цикл
-
if($count>1 && !$sharp) break;
-
}
-
-
if($past)
-
$out .= " назад"; //3 часа назад
-
else
-
$out = "Ещё ".$out; //Ещё 2 года
-
-
return $out;
-
-
}
-
?>
-
