Формат даты и времени в CodeIgniter. Русские названия в датах.
Для русскоязычных сайтов глазу приятнее встречать привычно оформленный и легко читаемый формат даты-времени. Вместо "2011-01-04 22:44:00" мы хотим видеть "4 января 2011 в 22:44". Что ж хотеть полезно не только в личной жизни! Как можно вывести дату-время по-русски в CodeIgniter.
1. Копируем хелпер даты из /system/helpers/date_helper.php в своё приложение - /application/helpers/date_helper.php (p.s. я всегда папку application перемещаю из system в корень для удобства, работоспособность фреймворка CodeIgniter от этого не меняется, а работаем мы почти всегда с содержимым папки application). Итак, хелпер мы скопировали для того, чтобы не вносить изменения в хелпер системы. Теперь у нашего приложения есть свой date_helper.php
2. В начало нашего скопированного date_helper.php добавляем 2 новых функции mysql_russian_date и mysql_russian_datetime. Одну я использую для форматирования даты, когда не нужно указывать время, вторую например в комментариях, где полезно отобразить время добавления комментария.
if ( ! function_exists('mysql_russian_date')) { function mysql_russian_date($datestr = '') { if ($datestr == '') return ''; // получаем значение даты и времени list($day) = explode(' ', $datestr); switch( $day ) { // Если дата совпадает с сегодняшней case date('Y-m-d'): $result = 'Сегодня'; break; //Если дата совпадает со вчерашней case date( 'Y-m-d', mktime(0, 0, 0, date("m") , date("d")-1, date("Y")) ): $result = 'Вчера'; break; default: { // Разделяем отображение даты на составляющие list($y, $m, $d) = explode('-', $day); $month_str = array( 'января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря' ); $month_int = array( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12' ); // Замена числового обозначения месяца на словесное (склоненное в падеже) $m = str_replace($month_int, $month_str, $m); // Формирование окончательного результата $result = $d.' '.$m.' '.$y; } } return $result; } } // ------------------------------------------------------------------------ if ( ! function_exists('mysql_russian_datetime')) { function mysql_russian_datetime($datestr = '') { if ($datestr == '') return ''; // Разбиение строки в 3 части - date, time and AM/PM $dt_elements = explode(' ',$datestr); // Разбиение даты $date_elements = explode('-',$dt_elements[0]); // Разбиение времени $time_elements = explode(':',$dt_elements[1]); // вывод результата $result1 = mktime($time_elements[0],$time_elements[1],$time_elements[2], $date_elements[1],$date_elements[2], $date_elements[0]); $monthes = array(' ','января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря'); $days = array(' ','понедельник','вторник','среда','четверг','пятница','суббота','воскресенье'); $day = date("j",$result1); $month = $monthes[date("n",$result1)]; $year = date("Y",$result1); $hour = date("G",$result1); $minute = date("i",$result1); $dayofweek = $days[date("N",$result1)]; $result = $day.' '.$month.' '.$year.' в '.$hour.':'.$minute; return $result; } } // ------------------------------------------------------------------------
3. Собственно говоря, всё. Теперь используем эти функции там, где выводим дату-время. Например в виде для комментария я обрабатываю дату из базы данных, где она хранится в формате: "2011-01-04 22:44:00"
<?=mysql_russian_datetime($item['date']);?>
и получаю 4 января 2011 в 22:44. Вот так в CodeIgniter можно задать своё форматирование даты и времени по-русски
А в том месте где нужно отобразить только дату, обрабатываю её:
<?=mysql_russian_date($main_info['date']);?>
$item и $main_info - это всего лишь переменные массивы, которые получаются в соответствующих контроллерах, вы замените их на свои. Разберитесь с этими двумя функциями, если интересно, и сможете выводить дату-время в своём формате.
almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.
Вы можете почитать все статьи от almix'а.
- 0 CodeIgniter: Всплывающая форма обратной связи на Ajax в Bootstrap Modal и проверкой Captcha (18.02.2014)
- Как правильно обновить ExpressionEngine до последней версии 2.5.5 (05.02.2013)
- Team Sense: Доступна отправка сообщения/письма на email сотрудника. (18.01.2013)
- TeamSense: username (логин) в регистрации пользователя. Внедрили библиотеку DHTMLX в TeamSense. (11.01.2013)
- Team Sense: В календарь добавлена возможность указывать место проведения уроков (в офисе, на выезде) (12.12.2012)
- Team Sense: Многопользовательский календарь, заменяем радиокнопки на чекбоксы в выборе преподавателей. Массивы в Javascript. (06.12.2012)
- Team Sense: В календарь-расписание уроков добавлено разделение по преподавателям, которым присвоены свои цвета. (04.12.2012)
- CodeIgniter не передаёт $this->uri->segment(3) в функцию контроллера (передача переменной PHP->JavaScript->PHP) (28.11.2012)
- Воюем с форматом даты в JavaScript. Приведение формата даты в поле input в календаре системы TeamSense к более красивому виду. (18.11.2012)
- Team Sense: Теперь Email-оповещения в TODO можно отправлять как для руководителя задачи, так и для помощников. (21.09.2012)
- CodeIgniter и TeamSense: Делаем свой вид для страницы с ошибкой 404, настраиваем правильную отдачу статусов в HTTP headers (12.09.2012)
- Установка другого сайта (на CodeIgniter или Yii) в подпапку и чтобы поддомен ссылался на подпапку (25.08.2015)
- CodeIgniter: Подключение JS и CSS файлов там, где это нужно. (26.06.2012)
- Использование DISTINCT в SQL-запросах для исключения повторяющихся данных применительно к фреймворку CodeIgniter. (18.06.2012)
- CodeIgniter выдаёт ошибку: Cannot modify header information - headers already sent by (13.04.2012)
- CodeIgniter: Передаются пустые значения полей формы через $_POST если вводить русские символы. Форма не проходит валидацию. (17.08.2016)
- Обновление CodeIgniter с версии 2.0 (2.0.0) до версии 2.0.1 (23.01.2012)
- CodeIgniter: Показываем сообщения пользователю на его действия (19.11.2011)
- Настройка локальной и рабочей сред для разработки на CodeIgniter (2-й вариант) (22.01.2012)
- Календарь c несколькими событиями в один день на CodeIgniter (Calendar Multiple Events Per Day) (23.10.2011)
- Настройка локальной среды для разработки на CodeIgniter в Mac OSX, используя MAMP (22.01.2012)
- Обновление CodeIgniter с версии 2.0.1 до 2.0.2 (23.10.2011)
- CodeIgniter: Аутентификация на сайте с помощью библиотеки DX Auth (24.08.2011)
- Сравнение Yii с CodeIgniter (23.10.2011)
- CodeIgniter: Рассылка email по выбранным группам зарегистрированных пользователей и списку незарегистрированных пользователей (02.03.2013)
4 комментариев
От себя хотелось бы добавить, что лучше не копировать хелпер, а создать для него расширение.
Почему бы не скопировать хелпер, там кода с гулькин нос.
Есть 2 предложения:
Первое - чтобы сделать расширение хелпера, нужно создать в application/helpers файл MY_date_helper.php и туда положить Ваш код.
И второе - перед строчкой:
// Формирование окончательного результата
я добавил ещё одну:
if ($d[0] == 0) $d = $d[1];
Теперь дата выводится не как 01 января, а как 1 января, что гораздо удобнее. А вообще спасибо за функцию)