<?php
class Times
{
/**
* Преобразует количество секунд в строку формата ЧЧ:ММ:СС.
*
* @param int $time Количество секунд
* @return string Время в формате ЧЧ:ММ:СС
*/
public static function timeHours(int $time = 0): string
{
$hours = floor($time / 3600); $minutes = floor(($time % 3600) / 60); $seconds = $time % 60;
$formattedTime = sprintf('%02d:%02d:%02d', $hours, $minutes, $seconds);
return Filter::clearFullSpecialChars($formattedTime);
}
/**
* Преобразует количество секунд в строку с указанием дней, часов, минут и секунд.
* Отображает только значимые части (например, скрывает нулевые дни или часы).
*
* @param int $seconds Количество секунд
* @return string Форматированная строка времени
*/
public static function timeInDate(int $seconds): string
{
$days = floor($seconds / 86400); $hours = floor(($seconds % 86400) / 3600); $minutes = floor(($seconds % 3600) / 60); $sec = $seconds % 60;
$parts = [];
if ($days > 0) {
$parts[] = "{$days} д";
}
if ($hours > 0 || !empty($parts)) { $parts[] = sprintf('%02d', $hours); }
if ($minutes > 0 || !empty($parts)) { $parts[] = sprintf('%02d', $minutes); }
return "{$sec} сек";
}
$result = $days > 0 ? "{$parts[0]} {$timePart}" : $timePart;
return Filter::clearFullSpecialChars($result);
}
/**
* Возвращает текущую дату в формате ДД.ММ.ГГГГ.
*
* @return string
*/
public static function getCurrentDate(): string
{
return Filter
::clearFullSpecialChars(date('d.m.Y')); }
/**
* Возвращает текущее время в формате ЧЧ:ММ:СС.
*
* @return string
*/
public static function getCurrentTime(): string
{
return Filter
::clearFullSpecialChars(date('H:i:s')); }
/**
* Возвращает текущую дату в формате "день месяц на русском языке" (например, "05 октября")
* Использует IntlDateFormatter при наличии, иначе — резервный вариант с ручной заменой месяцев.
*
* @return string
*/
public static function getDateRus(): string
{
// Попытка использовать Intl для корректного форматирования даты на русском
$formatter = new \IntlDateFormatter(
'ru_RU',
\IntlDateFormatter::NONE,
\IntlDateFormatter::NONE,
null,
null,
"d MMMM"
);
$formatter->setPattern('d MMMM');
return Filter::clearString($formatter->format(new \DateTime()));
}
// Резервный вариант: ручное сопоставление месяцев
$months = [
'January' => 'января',
'February' => 'февраля',
'March' => 'марта',
'April' => 'апреля',
'May' => 'мая',
'June' => 'июня',
'July' => 'июля',
'August' => 'августа',
'September' => 'сентября',
'October' => 'октября',
'November' => 'ноября',
'December' => 'декабря',
];
foreach ($months as $en => $ru) {
if (stripos($date, $en) !== false) { break;
}
}
return Filter::clearString($date);
}
}