Как вывести «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 — Выполняет целочисленное деление.