@orsenorsen
Интересна Backend-разработка

Как конвертировать формат времени 01:20:00 в 1 час 20 минут, без ненужных нулей?

Как конвертировать формат времени 01:20:00 (пример записи в базе) в 1 час 20 минут, чтобы при этом не было нулей впереди. Есть какие то готовые решения или самому надо писать логику?
  • Вопрос задан
  • 174 просмотра
Решения вопроса 1
delphinpro
@delphinpro Куратор тега PHP
frontend developer
В ларавеле даты представлены классом Carbon\Carbon.
Там уже есть все компоненты даты.
Так что единственная сложность здесь может возникнуть в склонении числительных.
Однако и эта проблемка относительно просто решается для каждого отдельного языка
В русском языке присутствуют три возможных формы, в английском еще проще – там их две.

Для русского может быть такая функция склонения числительных:

function plural(array $a, int $n): string
{
  $index = $n % 10 == 1 && $n % 100 != 11 ? 0
    : (
        $n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20)
        ? 1 : 2
      );
  return $a[$index];
}


И такой код для формирования строки

$date = now();
$s = $date->hour.' '.plural(['час', 'часа', 'часов'], $date->hour).' '
    .$date->minute.' '.plural(['минута', 'минуты', 'минут'], $date->minute);
dump($s);


Кроме того, в ларавел есть встроенные средства плюрализации в строках перевода.
https://laravel.com/docs/9.x/localization#pluralization
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы