Русская дата на PHP

Хочу поделиться функцией, которая позволяет сформировать дату с локализованными месяцами и днями недели:

function rusdate($d, $format = 'j %MONTH% Y', $offset = 0)
{
    $montharr = array('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
    $dayarr = array('понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье');
 
    $d += 3600 * $offset;
 
    $sarr = array('/%MONTH%/i', '/%DAYWEEK%/i');
    $rarr = array( $montharr[date("m", $d) - 1], $dayarr[date("N", $d) - 1] );
 
    $format = preg_replace($sarr, $rarr, $format); 
    return date($format, $d);
}

Первый параметр — юникс-дата, второй — формат выводимой даты. Оба параметра идентичны параметрам PHP-функции date(), однако в формате можно передать два дополнительных шаблона:

%MONTH% — русское название месяца (родительный падеж)
%DAYWEEK% — русское название дня недели

При необходимости можно с легкостью добавить в реализацию функции другие шаблоны. Пример использования:

echo rusdate( time(), '%DAYWEEK%, j %MONTH% Y, G:i' );

Результат:

пятница, 16 марта 2012, 23:59

Да, и еще. У функции есть необязательный третий параметр — сдвиг времени. Можно указать кол-во часов, на которые необходимо сдвинуть время относительно часового пояса на сервере.

Комментарии

Оставить комментарий »

 
Дмитрий
17 марта 2012, 19:10
#1
 

Вещь нужная, а то эти "17.01.2012" заставляют задуматься: "Что за дата??? А!!! Это вроде 17 месяц, первое число, 2012 года. А не всю жизнь путал! 17 число, январь, 2012 год". Сложно представить, но я всегда путал такие даты. А теперь легко.

Кстати сделал теги для каждого значения, ну мне так удобнее. Ну и наименования месяца и дня недели сделал с возможностью выбора: большие или маленькие буквы (ага, 2 массива).
И кстати, я хотел бы узнать, а зачем делать так:

date("Y", time());
Joker-jar
17 марта 2012, 19:34
#2
 

И кстати, я хотел бы узнать, а зачем делать так

это избыточная запись, этого же можно добиться с помощью

date('Y');

В принципе, да, можно и в rusdate() сделать что-то подобное. Поменять местами параметры, $d сделать необязательным:

rusdate($format = 'j %MONTH% Y', $d = NULL, $offset = 0)

ну и добавить условие в начале тела функции:

if ( is_null($d) ) $d = time();

Оставить комментарий

Ваше имя
 
Ваш e-mail
 
Комментарий