Немного о компьютере

Php русские названия месяцев. Представление даты и времени

У Вас в браузере заблокирован JavaScript. Разрешите JavaScript для работы сайта!

Представление даты и времени

В распределенных системах, таких, как Интернет, время играет особую роль. Из-за незначительного расхождения системных часов игрок на рынке Forex может потерять десятки тысяч долларов в течение нескольких минут; система деловой разведки ошибется в составлении прогноза; серверы NNTP в процессе синхронизации потеряют важную информацию, нужную пользователю и т.д.

PHP содержит множество функций для работы с датой и временем. Наиболее употребимыми являются:

  • time() - возвращает текущее абсолютное время. Это число равно количеству секунд, которое прошло с полуночи 1 января 1970 года (с начала эпохи UNIX).
  • getdate() - считывает информацию о дате и времени. Возвращает ассоциативный массив, содержащий информацию по заданному или по текущему (по умолчанию) времени. Массив содержит следующие элементы:

    Пример 1

    Использование getdate() $val) echo "$key = $val
    "; echo "
    Сегодня: $d.$d.$d"; ?>

    РЕЗУЛЬТАТ ПРИМЕРА 1:

    Seconds = 21 minutes = 4 hours = 12 mday = 10 wday = 4 mon = 11 year = 2005 yday = 313 weekday = Thursday month = November 0 = 1131613461 Сегодня: 10.11.2005

  • date() - форматирование даты и времени. Аргументы: строка формата и абсолютное время. Второй аргумент необязателен. Возвращает строку с заданной или текущей датой в указанном формате. Строка формата может содержать следующие коды:
    a
    A Включено обозначение "AM" или "PM"
    d День месяца (01-31)
    D Сокращенное название дня недели (три буквы)
    F Полное название месяца
    g Часы (12-часовой формат без ведущих нулей)
    G Часы (24-часовой формат без ведущих нулей)
    h Часы (12-часовой формат)
    H Часы (24-часовой формат)
    i Минуты (00-59)
    j День месяца без ведущих нулей (1-31)
    l Полное название дня недели
    L Признак високосного года (0 или 1)
    m Месяц (01-12)
    M Сокращенное название месяца (три буквы)
    n Месяц (1-12)
    s Секунды (00-59)
    t Количество дней в данном месяце (от 28 до 31)
    U Абсолютное время
    w
    y Год (два разряда)
    Y Год (четыре разряда)
    z День года (0-365)
    Z Смещение часового пояса в секундах (от -43200 до 43200)

    Любая другая информация, включенная в строку формата, будет вставлена в возвращаемую строку. Если в строку формата нужно добавить символы, которые сами по себе являются кодами формата, то перед ними надо поставить обратную косую черту "\". Символы, которые становятся кодами формата при добавлении к ним обратной косой, нужно предварять двумя косыми. Например, если необходимо добавить в строку "n", то надо ввести "\\n", поскольку "\n" является символом новой строки.

    Пример 2

    Использование date()

    РЕЗУЛЬТАТ ПРИМЕРА 2:

    Сегодня: 10.11.05 13:03

  • mktime() - возвращает абсолютное время, которое затем можно использовать с функциями date() или getdate() . Принимает до шести целочисленных аргументов в следующем порядке:

    Часы
    минуты
    секунды
    месяц
    день месяца
    год

    Пример 3

    Использование mktime()

    РЕЗУЛЬТАТ ПРИМЕРА 3:

  • checkdate() - проверка правильности даты. Аргументы: месяц, день, год. Возвращает true , если дата правильная, т.е.
    месяц - целое число от 1 до 12;
    день - целое число, не превышающее общего количества дней в данном месяце. При этом високосные годы обрабатываются корректно;
    год - целое число от 1 до 32767.

    Например:

    If (!checkdate($month, 1, $year)) { $d = getdate(); $month = $d; $year = $d; }

    Внимание! Дата может находиться в допустимом диапазоне, но остальные функции работы с датами не примут это значение. Так, нельзя использовать mktime() для годов до 1902, а также следует использовать ее осторожно для годов до 1970.

  • strftime() - формирование локальной даты и времени. Аргументы: строка формата и абсолютное время. Второй аргумент необязателен. Возвращает строку с заданной или текущей датой в указанном формате. При этом названия месяцев и дней недели извлекается из локали, выбранной с помощью функции Строка формата может содержать следующие коды:
    %a Сокращенное название дня недели
    %A Полное название дня недели
    %b Сокращенное название месяца
    %B Полное название месяца
    %c Предпочтительный формат даты и времени
    %C Номер века
    %d День месяца (1-31)
    %D То же, что и %m/%d/%y
    %e Месяц (1-12)
    %h То же, что и %b
    %H Часы (24-часовой формат)
    %I Часы (12-часовой формат)
    %j День года (0-365)
    %m Месяц (1-12)
    %M Минуты
    %n Символ новой строки
    %p Включено обозначение "am" или "pm"
    %r Время с использованием a.m./p.m.-нотации
    %R Время в 24-часовом формате
    %S Секунды (00-59)
    %t Символ табуляции
    %T То же, что и %H:%M:%S
    %u Номер дня недели (1 - понедельник, 7 - воскресенье)
    %U Номер недели. Отсчет начинается с первого воскресенья года
    %V Номер недели по ISO 8601:1988. Первая неделя должна иметь не менее четырех дней, а понедельник считается первым днем
    %W Номер недели. Отсчет начинается с первого понедельника года
    %w Номер дня недели (0 - воскресенье, 6 - суббота)
    %x Предпочтительный формат даты без времени
    %X Предпочтительный формат времени без даты
    %y Год (два разряда)
    %Y Год (четыре разряда)
    %Z Часовой пояс (имя или сокращение)
    %% Символ "%"

    Любая другая информация, включенная в строку формата, будет вставлена в возвращаемую строку.

Замечание: Для большинства систем допустимыми являются даты с 13 декабря 1901, 20:45:54 GMT по 19 января 2038, 03:14:07 GMT. (Эти даты соответствуют минимальному и максимальному значению 32-битового целого со знаком). Для Windows допустимы даты с 01-01-1970 по 19-01-2038.

Замечание: Для получения метки времени из строкового представления даты можно использовать функцию strtotime() . Кроме того, некоторые базы данных имеют собственные функции для преобразования внутреннего представления даты в метку времени (напрмер, функция MySQL UNIX_TIMESTAMP).


$tomorrow = mktime (0 , 0 , 0 , date ("m" ) , date ("d" )+ 1 , date ("Y" ));
$lastmonth = mktime (0 , 0 , 0 , date ("m" )- 1 , date ("d" ), date ("Y" ));
$nextyear = mktime (0 , 0 , 0 , date ("m" ), date ("d" ), date ("Y" )+ 1 );
?>

Замечание: Этот метод более надежен, чем вычитание и прибавление секунд к метке времени, так как mktime() учитывает любые неоднозначности в датах (переход на летнее/зимнее время и др.).

Приведем еще несколько примеров использования функции date() . Помните, что следует экранировать все символы, которые вы хотите видеть в результате работы функции без изменений. Это относится и к символам, которые в текущей версии PHP не распознаются как специальные, так как этим символам может быть назначено значение в следующих версиях. Используйте одинарные кавычки для предотвращения преобразования \n в перевод строки.


Пример 4. Форматирование с использованием date()

Иногда на страницах сайта появляется необходимость вывести не просто цифровую дату типа 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; 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."); //для замены $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."); //для замены $currentDate = str_replace($_mD, " ".$_monthsList[$_mD]." ", $currentDate); //теперь в переменной $currentDate хранится дата в формате 22 июня 2015

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

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

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

Похожие публикации