Относительная дата и время на PHP

В одном проекте решили подключить фичу — вывод относительной даты и времени на PHP, как сделать преобразование даты создания материала, даты записи, да чего угодно в БД или какой-либо другой даты в дату и/или время, относительно текущего часа и даты.

Например, у нас есть материал, созданный 29-го июня 2016 года в 20-10, а сейчас уже 20-11, т.е. минуту назад. А завтра уже будет день назад. Надо это учесть и вывести это. Так реализовано в ВКонтакте.

Вот такая простая функция на PHP, которая делает относительные даты и время.

/**
* time_elapsed_string
*
* @param $datetime
* @param bool $full
* @return string
*/
time_elapsed_string($datetime, $full = false) {
    $now = new DateTime;
    $ago = new DateTime($datetime);
    $diff = $now->diff($ago);
    $diff->w = floor($diff->d / 7);
    $diff->d -= $diff->w * 7;
    $string = array(
                    'y' => 'г.',
                    'm' => 'мес.',
                    'w' => 'нед.',
                    'd' => 'д.',
                    'h' => 'ч.',
                    'i' => 'мин.',
                    's' => 'сек.');
    foreach ($string as $k => &$v) {
        if ($diff->$k) 
            $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? '' : '');
        else
            unset($string[$k]);
    }
    if (!$full) $string = array_slice($string, 0, 1);
    return $string ? implode(', ', $string) . ' назад' : 'сейчас';
}

Данные должны передаваться в формате 2016-06-29 17:07:27. Пример использования:

$date = "2016-06-29 17:07:27";
echo time_elapsed_string($date);

P.S. Пока есть косяк — не учитывается часовой пояс. Но думаю скоро исправим в функции относительная дата и время на PHP

Начать проект вместе с нами
Заполните форму и отправьте
нам сообщение!
Если у Вас возникли вопросы, предложения, либо Вы желаете оформить заявку на заказ услуги — Добро пожаловать!
Телефоны и мессенджеры:
Москва: +7 (499) 389-42-40
Санкт-Петербург: +7 (812) 456-72-40