<php
class Date{
/**
* Функция, формирующая человекочитабельное представление разницы дат
*
* @param int $from Временная метка, от которой считаем
* @param int $to Относительная временная метка (если не задано, то сейчас)
* @param int $precision Сколько уровней, включая первый, нужно показать
* @param bool $short_form Использует формат "2h 30m" вместо "2 hours 30 mins"
*
* @return string
*/
public static function human_time_diff($from, $to = NULL, $precision = 2, $short_form = FALSE)
{
if ($to === NULL)
{
$to = time();
}
if ($to - $from < 60)
{
return $short_form ? '0m' : '0 mins';
}
$output = array();
$levels = array(
'years' => array('years', 'year'),
'months' => array('months', 'month'),
'weeks' => array('weeks', 'week'),
'days' => array('days', 'day'),
'hours' => array('hours', 'hour'),
'minutes' => array('mins', 'min'),
);
$span = Date::span($from, $to, 'years,months,weeks,days,hours,minutes');
// Берем и выводим $precision заполненных уровней, начиная с первого заполненного
foreach ($span as $level => $value)
{
if ( ! isset($recording))
{
if ($value == 0)
continue;
$recording = TRUE;
}
if ($value != 0)
{
if ($short_form)
{
// Краткая форма записи: 2h 30m
$output[] = $value.$level[0];
}
else
{
// Полная форма записи: 2 hours 30 mins
$output[] = $value.' '.$levels[$level][(int)($value == 1)];
}
}
if (--$precision == 0)
break;
}
return implode(' ', $output);
}
}
Last active
October 3, 2015 09:05
-
-
Save DKepov/10fb1ba0663301394025 to your computer and use it in GitHub Desktop.
display diff time for human
Author
DKepov
commented
Sep 29, 2015
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment