Back to top

Дата Carbon на русском языке

Вывод даты страницы или сообщения в блоге на русском языке — типовая задача практически любого сайта Рунета. Конечно, всегда есть возможность ограничиться отображением даты в формате типа 2018/03/24, но такое решение устроит далеко не всех. Тем более, что в Laravel задача отображения даты по-русски элегантно решается с помощью сторонней библиотеки jenssegers/date. В итоге, команда {{ Date::parse($post->created_at)->format('j F Y г.') }} в blade-шаблоне выведет форматированную дату, типа «25 октября 2018 г.».

Библиотека Carbon

Библиотека Carbon — простое расширение встроенного в PHP класса DateTime и мощный инструмент для разнообразных манипуляций с датой и временем. Библиотека поддерживает методы для генерации даты из строки, прибавления и отнимания временных промежутков и вывода даты в произвольном формате.

В Laravel поддержка библиотеки Carbon устроена таким образом, что по-умолчанию временные параметры моделей, типа created_at и updated_at, являются сущностями библиотеки. Это означает, что для отображения даты создания пользователя модели User достаточно применить один из методов библиотеки, например toFormattedDateString:

use Carbon\Carbon;

echo $user->created_at->toFormattedDateString();

Вот еще несколько примеров использования библиотеки.

use Carbon\Carbon;

echo Carbon::now()->format('l j F Y H:i:s');
echo Carbon::create(2001, 4, 21, 12)->diffForHumans();
echo Carbon::createFromTimestamp('1538599382')->format('Y/m/d');

Встречайте jenssegers/date

Единственная загвоздка в применении библиотеки Carbon для русскоязычных сайтов — это поддержка русского языка. На текущий момент в Carbon русифицированы лишь отдельные методы.

К счастью, для вывода даты на русском языке в Laravel можно воспользоваться дополнительной библиотекой jenssegers/date, разработанной энтузиастом Laravel и опытным веб-разработчиком Дженсом Сегерсом. Спрограммированное им расширение библиотеки Carbon как раз добавляет поддержку локализации и позволяет использовать на разных языках методы format, diffForHumans, parse, createFromFormat и timespan.

Алгоритм русификации

Давайте разберем, как настроить этот функционал.

1. Установить библиотеку с помощью команды в консоли:

composer require jenssegers/date

2. Установить для параметра locale в файле config/app.php значение "ru", т.е. русский язык:

'locale' => 'ru',

3. Добавить в метод boot в PHP-классе app\Providers\AppServiceProvider.php автозагрузку библиотеки jenssegers/date:

use Jenssegers\Date\Date;

public function boot()
{
    Date::setlocale(config('app.locale'));
}

4. Использовать библиотеку jenssegers/date для вывода даты в blade-шаблоне:

{{ Date::parse($post->created_at)->format('j F Y г.') }}

Должно вывести что-то типа "25 октября 2018 г.".

25 октября 2018 г.