Локальний формат часу в 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. Ми не персоналізуємо Вас, а лише робимо серфінг на сайті зручнішим. Ви можете ознайомитись з нашою Політикою приватності.