Форматируем время и склоняем падежи
function formatTime(int $timestamp): string { // Текущее время $now = time(); // Разница во времени $difference = $now - $timestamp; // Константы для периодов времени в секундах $second = 1; $minute = 60; $hour = 3600; $day = 86400; // Склоняем падежи $declension = function (int $number, string $formOne, string $formTwo, string $formThree): string { // Последняя цифра числа $lastDigit = $number % 10; if ($number == 1) { return "$number $formOne"; } elseif ($lastDigit == 0 || $lastDigit >= 5 || in_array($number % 100, range(11, 19))) { return "$number $formThree"; } else { return "$number " . (($lastDigit == 1) ? $formOne : $formTwo); } }; // Проверяем периоды времени if ($difference < $second) { return 'только что'; } elseif ($difference < $minute) { return $declension($difference, 'секунду', 'секунды', 'секунд') . ' назад'; } elseif ($difference < $hour) { return $declension(intdiv($difference, $minute), 'минуту', 'минуты', 'минут') . ' назад'; } elseif ($difference < $day) { return $declension(intdiv($difference, $hour), 'час', 'часа', 'часов') . ' назад'; } elseif ($difference < $day * 2) { return 'Вчера в ' . date('H:i', $timestamp); } else { return date('d.m.Y в H:i', $timestamp); } }
Для любителей короткого кода и рефакторов:
Можете использовать данный код:
<?php function formatTime(int $timestamp): string { // Разница во времени $difference = time() - $timestamp; // Функция склонения падежей $declension = function (int $number, string $formOne, string $formTwo, string $formThree): string { // Возращаем форму склонения return match (true) { $number == 1 => $number . PHP_EOL . $formOne, ($number % 10) == 0 || ($number % 10) >= 5 || in_array($number % 100, range(11, 19)) => $number . PHP_EOL . $formThree, default => $number . PHP_EOL . ((($number % 10) == 1) ? $formOne : $formTwo), } . PHP_EOL . 'назад'; }; // Проверяем периоды и форматируем время return match (true) { $difference < 1 => 'только что', $difference < 60 => $declension($difference, 'секунду', 'секунды', 'секунд'), $difference < 3600 => $declension(intdiv($difference, $minute), 'минуту', 'минуты', 'минут'), $difference < 86400 => $declension(intdiv($difference, $hour), 'час', 'часа', 'часов'), $difference < 172800 => 'Вчера в ' . date('H:i', $timestamp), default => date('d.m.Y в H:i', $timestamp), }; }
Пример использования:
echo formatTime(time()); // Только что echo formatTime(time() - 1); // 1 секунду назад echo formatTime(time() - 2); // 2 секунды назад echo formatTime(time() - 5); // 5 секунд назад
Это работает для секунд, минут и часов.
Если дата старше 24 часов, покажет что то на подобии такого:
Вчера в 00:13
Если старше 48 часов, покажет что то на подобии такого:
21.12.2024 в 12:44
php, time
Рейтинг:
+ 12
- 0
(Плюс
/ Минус
)
Просмотров: 556
Дата: 20 янв 2024, в 2:57
Добавил:

Авторизируйтесь для просмотра комментариев