3 сен 2020

Php, локаль или как вывести дату на русском

#php, #locale, #date

Программисты не любят работать с датами. Это всегда непросто и требует времени. Однако заказчик очень часто хочет видеть на сайте месяцы и дни понятные русскому человеку. В php есть встроенный механизм, позволяющий получить необходимый результат на любом языке. Но, как всегда, всё не так просто. Об этом и поговорим сегодня.

Php, локаль или как вывести дату на русском

Начнем с того, что очень многие пытаются выводить дату на русском с помощью функции date или getdate. Это в корне неверно. Для этого в php есть специальная функция strftime, документацию можно почитать тут. Она выводит дату с учетом локали. И здесь начинается магия.

Волшебное слово локаль вводит начинающего разработчика в ступор. Что это такое, что с этим делать и зачем это нужно? На самом деле, всё очень просто, локаль - это настройки операционной системы, описывающие язык, страну, часовой пояс, формат вывода даты и прочее. И без этих настроек, работа с strftime не даст никакого результата. Поэтому, этот код часто не срабатывает и дата выводится на английском:

1
2
setlocale(LC_ALL, 'ru_RU.utf8', 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');
echo strftime("%B %d, %Y");

Для настройки локали на Windows и Linux потребуется разный набор действий. В этой статье я не буду рассматривать Windows, потому что вероятность правильной работы локали и strftime там не гарантирована. Поэтому мы поговорим о том, как установить русскую локаль на Linux и вывести нужную дату, а для тех, кто не хочет лезть в настройки ОС или пользуется другой системой, могу посоветовать вот такой способ.

Linux

В моем случае это Ubuntu, но общий принцип будет сохраняться для всех nix-систем. Для начала попробуем узнать, не установлена ли нужная локаль. Открываем терминал и там вводим следующий код:

       locale -a | grep ru

Если данная команда ничего не вывела, то:

       dpkg-reconfigure locales

В появившейся форме ищем ru_RU.UTF-8 и нажимаем пробел, а затем enter. Запонимаем как называется выбранная локаль.

Выводим дату на русском

Название локали, которое мы получили выше (в моем случае ru_RU.utf8), вставляем в код:

1
2
setlocale(LC_ALL, '[название локали]');
echo strftime("%B %d, %Y");

Теперь, если вы всё сделали правильно, должно получиться например вот так: 03 сентября 2020.

Все статьи

© 2020-2021 Александр Пантелеев