Преобразование даты в mysql с помощью DATE_FORMAT()19.11.2008 сайт автора: http://webi.ru
публикация данной статьи разрешена только со ссылкой на сайт автора статьиКак известно, все даты хранятся в mysql в обратном порядке год-месяц-число(2008-10-18), иногда даже без разделителя(20081018). Чтобы вывести дату, нужно ее преобразовать в нормальный читаемый вид.
Тут есть два способа преобразования, эффективный и не очень. Не эффктивный способ это когда дату выводимую из mysql преобразуют с помощью php. Сам лично так делал очень долгое время. Перед выводом на экран переворачивал каждую дату с помощью php функции. Если количество преобразований не большое, то можно переворачивать дату и с помощью php, ничего плохого тут нет, но если нужно будет выдернуть десятки-сотни тысяч записей и в каждой преобразовать дату, то тут конечно намного быстрее будет преобразование дат с помощью mysql.
В mysql существует отличная функция DATE_FORMAT(), она очень похожа на php функцию date(). Вот пример использования SELECT DATE_FORMAT("2008-11-19",'%d.%m.%Y'); результат 19.11.2008
Все очень просто и быстро, нет необходимости крутить даты с помощью php. Вот список определителей этой функции
Определитель |
Описание |
%M |
Название месяца (январь...декабрь) |
%W |
Название дня недели (воскресенье...суббота) |
%D |
День месяца с английским суффиксом (0st, 1st, 2nd, 3rd и т.д.) |
%Y |
Год, число, 4 разряда |
%y |
Год, число, 2 разряда |
%X |
Год для недели, где воскресенье считается первым днем недели, число, 4 разряда, используется с '%V' |
%x |
Год для недели, где воскресенье считается первым днем недели, число, 4 разряда, используется с '%v' |
%a |
Сокращенное наименование дня недели (Вс...Сб) |
%d |
День месяца, число (00..31) |
%e |
День месяца, число (0..31) |
%m |
Месяц, число (00..12) |
%c |
Месяц, число (0..12) |
%b |
Сокращенное наименование месяца (Янв...Дек) |
%j |
День года (001..366) |
%H |
Час (00..23) |
%k |
Час (0..23) |
%h |
Час (01..12) |
%I |
Час (01..12) |
%l |
Час (1..12) |
%i |
Минуты, число (00..59) |
%r |
Время, 12-часовой формат (hh:mm:ss [AP]M) |
%T |
Время, 24-часовой формат (hh:mm:ss) |
%S |
Секунды (00..59) |
%s |
Секунды (00..59) |
%p |
AM или PM |
%w |
День недели (0=воскресенье..6=суббота) |
%U |
Неделя (00..53), где воскресенье считается первым днем недели |
%u |
Неделя (00..53), где понедельник считается первым днем недели |
%V |
Неделя (01..53), где воскресенье считается первым днем недели. Используется с `%X' |
%v |
Неделя (01..53), где понедельник считается первым днем недели. Используется с `%x' |
%% |
Литерал `%'. |
Комментарии
RSS комментарии
27.11.2008 ----
Ай шайтан!!!
Сам занимаюсь лет пять php и mysql, и все время переделывал дату в php...
Даже в голову не приходило, что проще использовать втроенную функцию mysql
28.11.2008 Жека
Аналогично! Всегда пользовался своей функцией на php
03.12.2008 Сергей
Ну а вообще, кто то хоть пользуется таким подходом?
Или все используют php для переворота даты?
Я лично никогда не переворачивал дату в mysql, до сих пор все в php делаю
28.06.2009 Илья
К сожалению, ничего не получилось :(
08.07.2009 Виталий
Круто, спасибо за функцию. Интересно, а ёщё какие нибуть загогулины есть?
14.07.2009 DSaint
Спасибо, очень помогло. Осталось только название месяца на русском отобразить)
28.07.2009 Влад
mysql=>PHP
select unix_timestamp(start_date) as start_date_php
php-code
date('d.m.Y',$row['start_date_php'])
PHP=>MySQL
update table set start_date=DATE_FORMAT(STR_TO_DATE('19.12.2009 18:35:22','%d.%m.%Y %H:%i'),'%Y.%m.%d %H:%i')
18.08.2009 Гость
2: DSaint
Есть такая чудная функция:
ELT( MONTH('2004-04-10'), 'Янв.','Фев.','Март','Апр.','Май','Июнь','Июль','Авг.','Сен.','Окт.','Ноя.','Дек.')
Пользуйся. :-)
29.10.2009 Владимир
Спасибо, про ELT( MONTH('2004-04-10'), 'Янв.','Фев.','Март','Апр.','Май','Июнь','Июль','Авг.','Сен.','Окт.','Ноя.','Дек.')
я не слыхал.
07.10.2010 Евгений
А что быстрее работает? Преобразование в запросе, или в результате работы php-функции?
07.10.2010 defender
Как минимум меньше памяти на обработку меньше вызовов функций меньше выделений памяти... Постоянно подобным пользуюсь только не в mysql а в postgresql.
08.10.2010 Админ
Евгений, вот defender правильно сказал, через базу это преобразование должно сработать красивее, но конечно если речь идет об извлечении огромного количества данных.
Если вы дергаете 10-20 записей, то нет никакой разницы как преобразовать дату, по сравнению с остальными нагрузками это мелочь.
27.01.2011 pcemma
ухх спасибо аффтору (: отпала нужда юзать свою мега крутую функцию для преобразования (:
13.04.2011 Xes
кАК ЕЕ ПОЛЬЗОВАТЬ В ПХП
while ($sqlr=mysql_fetch_array($sql))
{
echo ($sqlr['comadd'].' '.$sqlr['comment'].'<br><br>');
$sqlr['comadd'] - Надо в нормальной форме представитт?
}
14.04.2011 Виталий
У меня в базе дата записана в формате 19.11.2008 тип таблицы VARCHAR, как ее перезаписать в базу в формате 2008-11-19?
Руками просто очень долго...
Спасибо.
15.04.2011 админ
Xes, это функция MySQL, использовать ее нужно в запросе sql, который судя по вашему коду находится где-то выше. В данном участке кода ее нельзя использовать.
15.04.2011 админ
Виталий, просто измените тип ячейки на DATE, mysql автоматически переведет все данные в этой ячейке именно в формат 2008-11-19.
Но на всякий случай перед изменением типа ячейки сделайте дамп этой таблицы, так как вдруг база что то не то сделает и таблица сломается вообще.
Если вам важно оставить тип поля varchar, то после того, как вы установите тип DATE, установите обратно varchar...
Это самый простой вариант, но не совсем правильный, но я проверил, он работает.
14.05.2011 DDD
date("d-m-Y",strtotime("$myrow[date]"));
24.05.2011 Константин
а я всегда беру SELECT *,UNIX_TIMESTAMP(created) AS created FROM...
а мотом могу хоть в каком формате. Хоть только день, хоть только время...
и сравнивать, что больше 14.05.2011 или 14.05.2010...
А записываю так:
...date='.gmdate("Y-m-d H:i:s",$created)...
и вобщем-то, не вижу причин менять привычки
24.05.2011 сергей
Константин, да я и сам использую для вывода php date(), просто тут рассмотрен вариант преобразования даты не через php, а через mysql.
Я бы сказал, что это просто обзор mysql функции и она конечно имеет право на существование...
Добавить свой комментарий
|