Хочу рассказать Вам все о сайтах, что узнал сам за 15 лет.
Блог Виталия Жукова Vitalik.WS Свой сайт с нуля - легко!
Обо мне, как об авторе блога.
Подробнее
Vitalik.WSЗаметки → Название месяца / дата на русском языке с помощью PHP

Название месяца / дата на русском языке с помощью PHP
Заметка на тему: PHP

Иногда на страницах сайта появляется необходимость вывести не просто цифровую дату типа 23.07.2015, а сразу русскую дату, в которой месяц будет написан русским названием. И будет она выглядеть уже вот так 23 июля 2015.

Вы спросите: "Зачем это нужно?". А нужно это в первую очередь для лучшего визуального восприятия даты, так как первый уже стандартный для многих сайтов формат даты из одних только цифр с точками воспринимается намного хуже, чем когда день и год разделены словом-названием месяца. В этом случае можно намного быстрее понять, от какого эта дата месяца и года.

Но, что самое интересное, стандартная и довольно полезная дата-временная функция date() может выводить название месяца только на английском языке (от January до December), то есть воспользоваться параметром F данной функции нам не подойдет.

Тут нужен другой подход, заключающийся в подстановке заместо численного значения месяца (от 1 до 12) русского слова-обозначения этого месяца. На словах звучит сложновато, поэтому предлагаю в качестве примера вывести таким способом текущую дату:
//список месяцев с названиями для замены
$_monthsList = array(".01." => "января", ".02." => "февраля", 
".03." => "марта", ".04." => "апреля", ".05." => "мая", ".06." => "июня", 
".07." => "июля", ".08." => "августа", ".09." => "сентября",
".10." => "октября", ".11." => "ноября", ".12." => "декабря");

//текущая дата
$currentDate = date("d.m.Y");
//переменная $currentDate теперь хранит текущую дату в формате 22.07.2015

//но так как наша задача - вывод русской даты, 
//заменяем число месяца на название:
$_mD = date(".m."); //для замены
$currentDate = str_replace($_mD, " ".$_monthsList[$_mD]." ", $currentDate);
//теперь в переменной $currentDate хранится дата в формате 22 июня 2015


Вывести один лишь только текущий месяц на русском языке еще проще:
$_monthsList = array(
"1"=>"Январь","2"=>"Февраль","3"=>"Март",
"4"=>"Апрель","5"=>"Май", "6"=>"Июнь",
"7"=>"Июль","8"=>"Август","9"=>"Сентябрь",
"10"=>"Октябрь","11"=>"Ноябрь","12"=>"Декабрь");

$month = $_monthsList[date("n")];

echo $month;
//выведет, например, для 7 месяца "Июль"


Ну и для того, что бы было под рукой (это же все-таки заметка), рассмотрим еще несколько реальных примеров, с которыми, обычно, и приходится сталкиваться на практике. Для удобства сделаем их подзаголовками.

Вывод русского названия месяца в дате обычного формата, например 12.03.2015

Данный случай в принципе почти одинаков с описанным чуть выше, разница только в том, что $currentDate будет изначально задано по коду ранее. А выглядеть это будет так:

//текущая дата
$currentDate = '12.03.2015'; //может быть присвоена из другой переменной

//список месяцев с названиями для замены
$_monthsList = array(
  ".01." => "января",
  ".02." => "февраля",
  ".03." => "марта",
  ".04." => "апреля",
  ".05." => "мая",
  ".06." => "июня",
  ".07." => "июля",
  ".08." => "августа",
  ".09." => "сентября",
  ".10." => "октября",
  ".11." => "ноября",
  ".12." => "декабря"
);

//Наша задача - вывод русской даты, 
//поэтому заменяем число месяца на название:
$_mD = date(".m.", strtotime($currentDate)); //для замены
$currentDate = str_replace($_mD, " ".$_monthsList[$_mD]." ", $currentDate);

//теперь в переменной $currentDate хранится дата в формате 12 марта 2015


В итоге, после небольших манипуляций, мы получаем правильную дату на выходе.

Вывод даты на русском языке из unix timestamp формата, например 1437556706

Обработка такой даты является самой интересной, так как тут придется скомбинировать приемы изменения текущей даты и какой-то определенной даты в цифровом формате. А именно: нам нужно вначале получить дату из метки времени (unix timestamp), а потом в этой дате заменить число месяца на русское название месяца. Сделать это можно вот так:

//текущая дата в формате Unix TimeStamp
$_timestampDate = '1437556706'; //может быть присвоена из другой переменной

//переводим в нормальную дату
$currentDate = date("d.m.Y", $_timestampDate); //из 1437556706 в 22.07.2015

//список месяцев с названиями для замены
$_monthsList = array(
  ".01." => "января",
  ".02." => "февраля",
  ".03." => "марта",
  ".04." => "апреля",
  ".05." => "мая",
  ".06." => "июня",
  ".07." => "июля",
  ".08." => "августа",
  ".09." => "сентября",
  ".10." => "октября",
  ".11." => "ноября",
  ".12." => "декабря"
);

//Наша задача - вывод русской даты, 
//поэтому заменяем число месяца на название:
$_mD = date(".m.", $_timestampDate); //для замены
$currentDate = str_replace($_mD, " ".$_monthsList[$_mD]." ", $currentDate);

//теперь в переменной $currentDate хранится дата в формате 22 июня 2015


В итоге мы получили нужный нам формат даты из метки времени. Все как и хотели.

Кстати, при работе с timestamp мне не плохо помогает мой же веб-инструмент Unix TimeStamp конвертер. Это бесплатная штука, пользуйтесь на здоровье. Там так же можно подробнее узнать про эту самую Unix метку время. Все для Вас =)

Ну а что касается вывода даты/месяца на русском языке средствами PHP, то, думаю, тема более чем раскрыта. Изучайте, пользуйтесь и не бойтесь экспериментировать!

Все комментарии к заметке "Название месяца / дата на русском языке с помощью PHP"

  • Владислав
    Ответить
    Комментарий #78.13
    Отлично, всё работает, спасибо!
    добавлен 11 февраля 2018 в 0:51
Написать свой комментарий:
Отправить
ВНИМАНИЕ! Пожалуйста НЕ пишите в комментариях рекламу, оскорбления, бессмыслицу и прочие проявления интернет-нечисти, так как эти сообщения всеравно не будут опубликованы. Пишите исключительно по теме и ваш комментарий обязательно будет опубликован, а возможно и прокомментирован.
 Подписывайтесь на мой блог
Хотите первыми узнавать о самом интересном? Тогда подпишитесь на рассылку новостей.
Подписаться
Подписавшись на рассылку, Вы всегда будете в первую очередь узнавать о самой важной и полезной для блоггеров и веб-мастеров информации.