Формат даты и времени в CodeIgniter. Русские названия в датах.

Формат даты и времени в 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 - это всего лишь переменные массивы, которые получаются в соответствующих контроллерах, вы замените их на свои. Разберитесь с этими двумя функциями, если интересно, и сможете выводить дату-время в своём формате.

Источник: loco.ru

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (4)     Подпишитесь на RSS комментариев к этой статье.

4 комментариев

#20
Lencom говорит:
May 13, 2011 at 07:01 pm
Спасибо за статью!
От себя хотелось бы добавить, что лучше не копировать хелпер, а создать для него расширение.
#21
Денис говорит:
July 13, 2011 at 07:02 pm
Спасибо очень пригодилось. Как ни странно, нигде больше не нашел, да еще и с первого раза заработало.
Почему бы не скопировать хелпер, там кода с гулькин нос.
#654
Sarry говорит:
September 29, 2012 at 11:08 am


Есть 2 предложения:

Первое - чтобы сделать расширение хелпера, нужно создать в application/helpers файл MY_date_helper.php и туда положить Ваш код.

И второе - перед строчкой:

// Формирование окончательного результата

я добавил ещё одну:

if ($d[0] == 0) $d = $d[1];

Теперь дата выводится не как 01 января, а как 1 января, что гораздо удобнее. А вообще спасибо за функцию)

#661
almix говорит:
October 5, 2012 at 01:16 am
Sarry, спасибо за предложения. Почему MY_date_helper делать? у меня был просто date_helper.