Русская дата на PHP
16 марта 2012. Автор: Joker-jar
Хочу поделиться функцией, которая позволяет сформировать дату с локализованными месяцами и днями недели:
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.01.2012" заставляют задуматься: "Что за дата??? А!!! Это вроде 17 месяц, первое число, 2012 года. А не всю жизнь путал! 17 число, январь, 2012 год". Сложно представить, но я всегда путал такие даты. А теперь легко.
Кстати сделал теги для каждого значения, ну мне так удобнее. Ну и наименования месяца и дня недели сделал с возможностью выбора: большие или маленькие буквы (ага, 2 массива).
И кстати, я хотел бы узнать, а зачем делать так:
это избыточная запись, этого же можно добиться с помощью
В принципе, да, можно и в rusdate() сделать что-то подобное. Поменять местами параметры, $d сделать необязательным:
ну и добавить условие в начале тела функции: