Меню показать Меню скрыть
Современные
проекты
от ПаЛыЧа
Сайк ПавелСайк Павел
2 мес. назад

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

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

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

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

function 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

Добавить комментарий

Наверх