Форматируем время и склоняем падежи
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
(Плюс
/ Минус
)
Просмотров: 516
Дата: 20 янв 2024, в 2:57
Добавил: Jack Sparrow
Авторизируйтесь для просмотра комментариев