Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как вывести «5 минут назад»

Короткий ответ

Посчитайте разницу в секундах и подберите единицу:

<?php
 
function timeAgo(DateTimeImmutable $date, DateTimeImmutable $now): string
{
    $seconds = $now->getTimestamp() - $date->getTimestamp();
 
    return match (true) {
        $seconds < 60 => 'just now',
        $seconds < 3600 => intdiv($seconds, 60) . ' min ago',
        $seconds < 86400 => intdiv($seconds, 3600) . ' h ago',
        default => intdiv($seconds, 86400) . ' d ago',
    };
}
 
$now = new DateTimeImmutable('2026-03-15 12:00');
 
echo timeAgo(new DateTimeImmutable('2026-03-15 11:55'), $now), "\n";
echo timeAgo(new DateTimeImmutable('2026-03-15 09:00'), $now), "\n";
echo timeAgo(new DateTimeImmutable('2026-03-10 12:00'), $now);

Результат:

5 min ago
3 h ago
5 d ago

Текущее время

В настоящем коде вторым аргументом передают new DateTimeImmutable(). Текущее время в параметре, а не внутри функции, позволяет её проверить тестом.

Функции из этого ответа

  • DateTimeImmutable — Объект даты и времени, который нельзя изменить: каждое действие возвращает новый объект.
  • date_diff — Вычисляет разницу между двумя датами.
  • intdiv — Выполняет целочисленное деление.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.