Локальный формат времени в Carbon

Для тех, кто не успевает следить за всеми новшествами, которые появляются в прекрасной библиотеке Carbon, мы поделимся самым болезненным моментом, который бесит разработчиков, а именно вывод времени в локализированном виде, например 9 декабря 2021 г.

Разработчик, который не особо следит на нововведениями как в PHP, так и в Carbon, может предложить вариант:


$current_russian_time = Carbon::now()->locale('ru')->format('j F Y г.');


Однако, смею вас заверить, что получите Вы примерно это: 9 December 2021 г.. Дело в том, что разработчики Carbon поменяли подход к понятию локализации, перейдя на форматы ISO. Чтобы теперь получить локазированный вид даты/времени/дня недели, нужно использовать такой код:


Carbon::setLocale('ru');
$current_russian_time = Carbon::now()->isoFormat('D MMMM Y г.');

Получаем желаемый результат: 9 декабря 2021 г.

Использование Carbon::setLocale('ru'); позволяет использовать внешние ключи для передачи текущей локали один раз для всех последующих временных меток. В противном случае пришлось бы писать постоянно: Carbon::now()->locale('ru')->isoFormat('D MMMM Y г.');

Введение в Carbon 2.x isoFormat позволило делать интересные чудеса с датой и временем, например вот такие:


$date = Carbon::parse('2018-03-16')->locale('uk');
echo $date->getTranslatedDayName('[в] dddd'); // п’ятницю
// By providing a context, we're saying translate day name like in a format such as [в] dddd
// So the context itself has to be translated first consistently.
echo "\n";
echo $date->getTranslatedDayName('[наступної] dddd'); // п’ятниці
echo "\n";
echo $date->getTranslatedDayName('dddd, MMM'); // п’ятниця
echo "\n";
// The same goes for short/minified variants:
echo $date->getTranslatedShortDayName('[наступної] dd'); // пт
echo "\n";
echo $date->getTranslatedMinDayName('[наступної] ddd'); // пт
echo "\n";

// And the same goes for months
$date->locale('ru');
echo $date->getTranslatedMonthName('Do MMMM'); // марта
echo "\n";
echo $date->getTranslatedMonthName('MMMM YYYY'); // март
echo "\n";
// Short variant
echo $date->getTranslatedShortMonthName('Do MMM'); // мар
echo "\n";
echo $date->getTranslatedShortMonthName('MMM YYYY'); // мар
echo "\n";

// And so you can force a different context to get those variants:
echo $date->isoFormat('Do MMMM'); // 16-го марта
echo "\n";
echo $date->isoFormat('MMMM YYYY'); // март 2018
echo "\n";
echo $date->isoFormat('Do MMMM', 'MMMM YYYY'); // 16-го март
echo "\n";
echo $date->isoFormat('MMMM YYYY', 'Do MMMM'); // марта 2018
echo "\n";


Более детально ознакомиться с фишками локализации можно на оф. странице библиотеки https://carbon.nesbot.com/docs/#api-localization

Никогда не поздно изменить свой бизнес к лучшему

Приступить

Этот сайт использует файлы Cookie. Мы не персонализируем Вас, а лишь делаем серфинг на сайте более удобным. Вы можете ознакомиться с нашей Политикой приватности.