Форматируем время и склоняем падежи

Правильное отображение времени

  1. Форматируем время и склоняем падежи
  2. <?php
  3.  
  4. function formatTime(int $timestamp): string {
  5. // Текущее время
  6. $now = time();
  7.  
  8. // Разница во времени
  9. $difference = $now - $timestamp;
  10.  
  11. // Константы для периодов времени в секундах
  12. $second = 1;
  13. $minute = 60;
  14. $hour = 3600;
  15. $day = 86400;
  16.  
  17. // Склоняем падежи
  18. $declension = function (int $number, string $oneForm, string $twoFourForm, string $manyForm): string {
  19. $lastDigit = $number % 10;
  20.  
  21. if ($number == 1) {
  22. return "$number $oneForm";
  23. } elseif ($lastDigit == 0 || $lastDigit >= 5 || in_array($number % 100, range(11, 19))) {
  24. return "$number $manyForm";
  25. } else {
  26. return "$number " . (($lastDigit == 1) ? $oneForm : $twoFourForm);
  27. }
  28. };
  29.  
  30. // Проверяем периоды времени
  31. if ($difference < $second) {
  32. return 'только что';
  33. } elseif ($difference < $minute) {
  34. return $declension($difference, 'секунду', 'секунды', 'секунд') . ' назад';
  35. } elseif ($difference < $hour) {
  36. return $declension(intdiv($difference, $minute), 'минуту', 'минуты', 'минут') . ' назад';
  37. } elseif ($difference < $day) {
  38. return $declension(intdiv($difference, $hour), 'час', 'часа', 'часов') . ' назад';
  39. } elseif ($difference < $day * 2) {
  40. return 'Вчера в ' . date('H:i', $timestamp);
  41. } else {
  42. return date('d.m.Y в H:i', $timestamp);
  43. }
  44. }


Пример использования:
  1. echo formatTime(time()); // Только что
  2. echo formatTime(time() - 1); // 1 секунду назад
  3. echo formatTime(time() - 2); // 2 секунды назад
  4. echo formatTime(time() - 5); // 5 секунд назад

Это работает как для секунд так и минут и часов.

Если дата старше 24 часов, покажет что то на подобии такого:
  1. Вчера в 00:13

Если старше 48 часов, покажет что то на подобии такого:
  1. 21.12.2024 в 12:44


  20.01.24 / 16:58 | PHP |   49 | 0   0