Local time format in Carbon
For those who don't have time to keep up with all the innovations that appear in the beautiful Carbon library, we will share the most painful moment that pisses off the developers, namely the display of the time in localized form, such as December 9, 2021. A developer who doesn't particularly follow innovations in both PHP and Carbon might offer an option:
Для тих, хто не встигає стежити за всіма нововведеннями, які з'являються в прекрасній бібліотеці 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