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


lamara-nsk.ru
Это блог о сео, деньгах, заработке в сети, разработке своих проектов, программировании
и "жизни программиста", бизнесе, блогосфере, фрилансе и многом другом.


Контакты, Реклама в блоге




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

Автор DimoninG, написано 12.04.2008
Рубрика на 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, выводит секунды.

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



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


ae471697

    пишет:

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


    пишет:

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


    пишет:

    Чуток подправил для удобства:
    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); //ЧЧ:ММ


    пишет:

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


    пишет:

    Немного подправил фунцию для вывода в формте дд месяц 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


    пишет:

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


    пишет:

    Извените немного ошибся в строке
    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];}


    пишет:

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


    пишет:

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


    пишет:

    $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], ‘время:’);


    пишет:

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


    пишет:

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

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


    пишет:

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


    пишет:

    >>А при таком запросе?
    >>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?)


    пишет:

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


    пишет:

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


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

Что здесь почитать?



1.   Разработки.
1.1 Плагин "Я не робот"
1.2 Плагин "Код Adsense прямо в пост"

2.   Заработай.
2.1 Блогун: 20$ в день
2.2 Уходим от налогов в Sape
2.3 Хватит думать, пора зарабатывать

3.   Акции и конкурсы.
3.1 Ссылка за "Рабочий стол"

Показать весь список.

-->








Блог на движке WordPress и тема для него создана DimoninG'ом в 2007 году.
Все материалы авторские, их копирование запрещено законом об авторском праве.