Преобразование даты MySQL в общепринятый (человеческий) формат

Рубрики: на PHP  

Думаю, многим, кто работал с датами в своих скриптах знакома такая проблема: в MySQL дата хранится в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС – и это нельзя просто так вывести пользователю, он не разберется. Нужно, чтобы дата выводилась в общепринятом (в России) формате: ДД-ММ-ГГГГ ЧЧ:ММ:СС.

Я попробовал решить эту проблему самым простым путем.

Погуглив, я удивился: некоторые программисты пишут целые классы для преобразования дат и т.п. Зачем так сложно? В пределах одного проекта понадобится один-два, ну от силы три формата даты и все… Я написал одну функцию, которая меня совершенно устроила и была применена на некоторых моих сайтах.

// Функция преобразования даты.
function data_convert ($data, $year, $time, $second){
$res = "";
$part = explode(" " , $data);
$ymd = explode ("-", $part[0]);
$hms = explode (":", $part[1]);
if ($year == 1) {$res .= $ymd[2]; $res .= ".".$ymd[1]; $res .= ".".$ymd[0];}
if ($time == 1) {$res .= " ".$hms[0]; $res .= ":".$hms[1]; if ($second == 1) $res .= ":".$hms[2];}
return $res;
}

Как ее применить? Легко. Предположим, мы прочитали что-то из БД:

$str = mysql_fetch_array (mysql_query («…»));

И тут у нас записана дата: $str['dt'] (в формате MySQL, конечно, т.е. ГГГГ-ММ-ДД ЧЧ:ММ:СС).

Чтобы везде, где выводится дата, она выводилась в нужном нам формате, напишем:

$str['dt'] = data_convert ($str['dt'], 1, 1, 0);

Получаем красивую дату: ДД-ММ-ГГГГ ЧЧ:ММ.

Что за параметры у функции? Глядя на код и так все понятно, но поясню дополнительно: первый это дата в формате MySQL (текстовая строка), следующие три могут быть 0 или 1. Второй параметр: если 1, выводит год. Третий: если 1, выводит часы и минуты. Четвертый: если 1, выводит секунды.

Думаю, все довольно прозрачно.



Отзывов (21) на «Преобразование даты MySQL в общепринятый (человеческий) формат»

    Kirill пишет:

    Спасибо огоромное!
    Очень удачная и простая и удачная функция…
    Очень выручил и сэкономил кучу времени…..
    Спасибо!!!


    admin пишет:

    Незачто ;) Удачи в программинге ;)


    CaHeK пишет:

    Чуток подправил для удобства:
    function data_convert($data, $year=1, $time=0, $second=0)
    {
    $res = «»;
    $part = explode(» » , $data);
    $ymd = explode («-», $part[0]);
    if (isset($part[1])) $hms = explode («:», $part[1]);
    if ($year == 1) {$res .= $ymd[2]; $res .= «.».$ymd[1]; $res .= «.».$ymd[0];}
    if ($time == 1) {$res .= » «.$hms[0]; $res .= «:».$hms[1]; if ($second == 1) $res .= «:».$hms[2];}
    return $res;
    }

    Использование:
    $str[’dt’] = data_convert ($str[’dt’]); //ДД-ММ-ГГГГ
    $str[’dt’] = data_convert ($str[’dt’],0,1,1); //ЧЧ:ММ


    admin пишет:

    Супер! Спасибо! :)


    mikaxxl пишет:

    Немного подправил фунцию для вывода в формте дд месяц uuuu

    function data_convert ($data, $year=1, $time=0, $second=0){
    $month = array («», «Января», «Февраля», «Марта», «Апреля», «Мая», «Июня», «Июля», «Августа», «Сентября», «Октября», «Ноября», «Декабря»);
    $result = «»;
    $part = explode(» » , $data);
    $ymd = explode («-», $part[0]);
    if (isset($part[1])) $hms = explode («:», $part[1]);
    if ($year == 1) {$result .= $ymd[2]; $result .= » «.$month[$ymd[1]]; $result .= » «.$ymd[0];}
    if ($time == 1) {$result .= » «.$hms[0]; $result .= «:».$hms[1]; if ($second == 1) $result .= «:».$hms[2];}
    return $result;
    }
    echo $myrow['burn_date'] = data_convert($myrow['burn_date'])

    в результате выведет в таком формате: 12 Декабря 1970


    Серега) пишет:

    Спасибо всем)


    mikaxxl пишет:

    Извените немного ошибся в строке
    if ($year == 1) {$result .= $ymd[2]; $result .= ” “.$month[$ymd[1]]; $result .= ” “.$ymd[0];}
    Чтобы отображались все месяцы необходимо писать так
    if ($year == 1) {$result .= $ymd[2]; $result .= » «.$month[(int)$ymd[1]]; $result .= » «.$ymd[0];}


    merlin пишет:

    Зачем преобразовывать дату в php? В mysql уже есть функция DATE_FORMAT, можно ее использовать непосредственно в SQL запросе и получить дату в нужном нам формате.


    Alex пишет:

    strtotime и date вам в помощь


    xcopy пишет:

    $time = strtotime(‘2009-04-23 15:28:26′);
    $month = array(1=>»января», 2=>»февраля», 3=>»марта», 4=>»апреля», 5=>»мая», 6=>»июня», 7=>»июля», 8=>»августа», 9=>»сентября», 10=>»октября», 11=>»ноября», 12=>»декабря»);
    $int_month = date(‘n’, $time);
    $date = date(‘\%\s d \%\s Y, \%\s H:i:s’, $time);
    echo sprintf($date, ‘Сегодня:’, $month[$int_month], ‘время:’);


    art пишет:

    MySQL с этим прекрасно справляется:
    select date_format(datetime,’%d.%m.%Y’) from table;


    SETTER пишет:

    А при таком запросе?
    mysql_query(«SELECT * FROM tbl_1 WHERE id_tbl_2 = $id_tbl_2″)

    Как вот это использовать?
    select date_format(datetime,’%d.%m.%Y’) from table;


    SETTER пишет:

    http://lphp.ru/?id_article=165


    ftr404 пишет:

    >>А при таком запросе?
    >>mysql_query(”SELECT * FROM tbl_1 WHERE id_tbl_2 =
    >>$id_tbl_2?)

    mysql_query(”SELECT *,date_format(datetime,’%d.%m.%Y’)as date_normal FROM tbl_1 WHERE id_tbl_2 = $id_tbl_2?)


    6ypaTuHo пишет:

    Большое спасибо! Все здорово получилось!


    Marik пишет:

    Спасибо. Полезный сайт. Хороший рабочий скрипт.
    С уважением.


    Aube пишет:

    Отличный пример говнокода! Спасибо!


    MG пишет:

    Отличный пример того, как не надо делать )))
    учим SQL date_format
    да и в php есть готовые функции.


    Den пишет:

    Thanks =)


    enforc1k пишет:

    Автору респект! Так долго искал нужное решение, пол инета перерыл, в основном все описывают конверт из timestamp.

    СПАСИБО ОГРОМНОЕ!


    Alexey пишет:

    Спасибо! То что надо.


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

Теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не спамер и не робот.
Я спамер и робот!

dimoning.ru
SEO и программирование.
  • Рубрики:



  • Рассылка:

  • Дополнительно:

  • По месяцам:

  • Счетчики:

    Яндекс цитирования
  • Спонсоры:


  • dimoning.ru © 2008-2011 г.
    Все материалы авторские, но их можно копировать с указанием прямой ссылки на источник.