Как преобразовать числовое представление минут в текст?

Здравствуйте! Подскажите пожалуйста, может быть есть какое-то решение на гите или еще где-то?
Нужно, допустим 123 минуты преобразовать в строку "2 часа 3 минуты", но при этом, чтобы нормально все было со склонениями (то есть я мог бы впихивать туда разные числа, и при этом с точки зрения русского языка все выглядело бы нормально)
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
Предложу свою библиотеку, которая делает как раз то, что нужно: https://github.com/wapmorgan/Morphos
После установки через composer можно пользоваться методом \morphos\Russian\TimeSpeller::spellDifference:

var_dump(\morphos\Russian\TimeSpeller::spellDifference('+123 minute'));
// либо unix timestamp
var_dump(\morphos\Russian\TimeSpeller::spellDifference(time() + 123*60+1));
// +1 нужно потому, что во время парсинга эта секунда "съедается"

Оба выдают результат: string(25) "2 часа 3 минуты"
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@ramiloremispum
Backend Web-dev
Я прогонял значение через эту функцию.
function test($value)
    {
        $ost = $value % 10;
        if ($value >= 5 && $value <= 20) {
            $str = 'часов';
        } else if ($ost == 2 || $ost == 3 || $ost == 4) {
            $str = 'часа';
        } else if ($ost == 1) {
            $str = 'час';
        } else {
            $str = 'часов';
        }
        return $value . ' ' . $str;
    }


Для минут та же самая логика.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы