Я использую библиотеку PHP Intl для форматирования дат, чисел и так далее.
Теперь я должен показать промежуток времени в читаемой человеком строке, например:
1 день, 1 час, 10 минут, 14с
или компактно:
1д 1с 10м 14с
или суперкомпактным способом:
1d 1.10: 14
Есть ли способ сделать это с помощью сборки в библиотеке Intl без gettext?
Если нет, я могу отформатировать временной интервал с помощью пользовательской функции, но могу ли я получить хотя бы имена (‘day’ или ‘d’) в правильной локали из IntlDateFormatter?
Да, ответ на ваш вопрос DateInterval
, В соответствии с документация Вы можете использовать это так:
$pastDate = new DateTime('2015-09-01 15:00:00');
$today = new DateTime();
//calculate interval and returns DateInterval object
$timeSpan = $today->diff($pastDate);
//now we'll format it
echo $timeSpan->format('%a day, %h hour, %i minutes, %ss').PHP_EOL;
echo $timeSpan->format('%ad %hh %im %ss').PHP_EOL;
echo $timeSpan->format('%ad %h.%i:%s').PHP_EOL;
Результатом будет:
100 дней, 9 часов, 55 минут, 12 с
100d 9h 55m 12s
100d 9.55: 12
Других решений пока нет …