Только дата sql php

Преобразование даты в mysql с помощью DATE_FORMAT()

Как известно, все даты хранятся в mysql в обратном порядке год-месяц-число(2008-10-18), иногда даже без разделителя(20081018).
Чтобы вывести дату, нужно ее преобразовать в нормальный читаемый вид.

Тут есть два способа преобразования, эффективный и не очень.
Не эффктивный способ это когда дату выводимую из mysql преобразуют с помощью php.
Сам лично так делал очень долгое время. Перед выводом на экран переворачивал каждую дату с помощью php функции.
Если количество преобразований не большое, то можно переворачивать дату и с помощью php, ничего плохого тут нет, но если нужно будет выдернуть десятки-сотни тысяч записей и в каждой преобразовать дату, то тут конечно намного быстрее будет преобразование дат с помощью mysql.

В mysql существует отличная функция DATE_FORMAT(), она очень похожа на php функцию date().
Вот пример использования

SELECT DATE_FORMAT(«2008-11-19»,’%d.%m.%Y’);
результат

Все очень просто и быстро, нет необходимости крутить даты с помощью 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’
%% Литерал `%’.
Читайте также:  Планировщик дел на python

Комментарии

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’].’

‘);

$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 функции и она конечно имеет право на существование.

Источник

Выборка c условием по дате в mysql БД через PHP

Одной из самой сложной работы в php считаю запросы в mysql по дате. Во-первых, не всегда логически просто понять что нужно выбрать если у нас сложные условия, типа: выбрать все даты из БД, которые больше такого-то отрезка времени, но меньше текущей даты увеличенной на 25 дней. Во-вторых, возникают другие проблемы от формата до самих запросов.

Начнем с формата хранения даты в БД

Вспомните тип поля timestamp, у него формат времени такой: гггг-мм-дд чч:мм:сс, например: 2017-11-05 14:23:05. Рекомендую использовать в своих базах именно этот формат, т.к. это стандарт. За счет него можно будет выгружать только время или дату, или одновременно то и другое. Не обязательно тип поля брать timestamp, можно использовать обычный text.

Примеры mysql запросов

Теперь рассмотрим практические примеры выборок по дате с учетом того, что дата записана в формате гггг-мм-дд чч:мм:сс:

1. Выбираем все записи в диапазоне: дата в БД < текущей
select * from ruefz_jcomments where DATE(date)

2. Выбираем данные за текущий месяц: дата в БД > от 1 числа этого месяца и дата < 1 числа следующего месяца
select id from tab where date > LAST_DAY(CURDATE()) + INTERVAL 1 DAY — INTERVAL 1 MONTH and date < DATE_ADD(LAST_DAY(CURDATE()), INTERVAL 1 DAY)
Расшифровка: выбрать все id записи, в которых дата > последний день месяца сегодняшней даты + 1 день — 1 месяц и дата < последний день месяца сегодняшней даты + 1 день

3. Выбираем данные за текущий месяц, год и день не учитывается (%c месяц 1-12, %e дни 1-31 в mysql; n — месяц 1-12, j дни 1-31 в PHP )
select id from tab where DATE_FORMAT(date, ‘%c’)='».date(‘n’).»‘

4. За текущую неделю
select id from tab where date > DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) -1) DAY) and date < DATE_ADD(CURDATE(), INTERVAL (9 - DAYOFWEEK(CURDATE())) DAY)

5. выбираем все записи в диапазоне: (текущая — 10 дней) < дата в БД < текущая дата
select * from ruefz_jcomments where DATE(date) = DATE_SUB(NOW(), INTERVAL 10 DAY)

По этим примерам вам будет понятно, как составлять свои решения. Зачастую, при работе с датами вам потребуется использовать запросы DATE_ADD – прибавление, DATE_SUB — вычитание, CURDATE() — сегодняшняя дата, NOW() — сегодняшняя дата и время.

Изменить формат вывода времени в mysql

Если из БД надо взять дату в другом формате, мы можем изменить ее на «лету», для обработки на php скриптах:

DATE_FORMAT(date,format) — Форматирует величину date в соответствии со строкой format.

Пример:
$result = mysql_query(«SELECT DATE_FORMAT(‘1997-10-04 22:23:01’, ‘%d.%m.%Y %H:%i:%S’) AS datess FROM csv»);
while ($row=mysql_fetch_array($result)) echo $row[«datess»].»
«; >//05.11.2017 14:23:55

В последнем примере мы приводим дату из БД в читаемый вид для пользователя.

Источник

Только дата sql php

Функция EXTRACT извлекает из даты и времени какой-то определенный компонент. Ее формальный синтаксис:

EXTRACT(unit FROM datetime)

Значение datetime представляет исходную дату и (или) время, а значение unit указывает, какой компонент даты или времени будет извлекаться. Параметр unit может представлять одно из следующих значений:

  • SECOND (секунды)
  • MINUTE (минуты)
  • HOUR (час)
  • DAY (день)
  • MONTH (месяц)
  • YEAR (год)
  • MINUTE_SECOND (минуты и секунды)
  • HOUR_MINUTE (часы и минуты)
  • DAY_HOUR (день и часы)
  • YEAR_MONTH (год и месяц)
  • HOUR_SECOND (часы, минуты и секунды)
  • DAY_MINUTE (день, часы и минуты)
  • DAY_SECOND (день, часы, минуты и секунды)

EXTRACT( SECOND FROM ‘2018-05-25 21:25:54’)

EXTRACT( MINUTE FROM ‘2018-05-25 21:25:54’)

EXTRACT( HOUR FROM ‘2018-05-25 21:25:54’)

EXTRACT( DAY FROM ‘2018-05-25 21:25:54’)

EXTRACT( MONTH FROM ‘2018-05-25 21:25:54’)

EXTRACT( YEAR FROM ‘2018-05-25 21:25:54’)

EXTRACT( MINUTE_SECOND FROM ‘2018-05-25 21:25:54’)

EXTRACT( DAY_HOUR FROM ‘2018-05-25 21:25:54’)

EXTRACT( YEAR_MONTH FROM ‘2018-05-25 21:25:54’)

EXTRACT( HOUR_SECOND FROM ‘2018-05-25 21:25:54’)

EXTRACT( DAY_MINUTE FROM ‘2018-05-25 21:25:54’)

EXTRACT( DAY_SECOND FROM ‘2018-05-25 21:25:54’)

Функции для манипуляции с датами

Ряд функций позволяют производить операции сложения и вычитания с датами и временем:

  • DATE_ADD(date, INTERVAL expression unit) возвращает объект DATE или DATETIME, который является результатом сложения даты date с определенным временным интервалом. Интервал задается с помощью выражения INTERVAL expression unit , где INTERVAL предоставляет ключевое слово, expression — количество добавляемых к дате единиц, а unit — тип единиц (часы, дни и т.д.) Параметр unit может иметь те же значения, что и в функции EXTRACT, то есть DAY, HOUR и т.д.
  • DATE_SUB(date, INTERVAL expression unit) возвращает объект DATE или DATETIME, который является результатом вычитания из даты date определенного временного интервала
  • DATEDIFF(date1, date2) возвращает разницу в днях между датами date1 и date2
  • TO_DAYS(date) возвращает количество дней с 0-го года
  • TIME_TO_SEC(time) возвращает количество секунд, прошедших с момента полуночи

DATE_ADD(‘2018-05-25’, INTERVAL 1 DAY)

DATE_ADD(‘2018-05-25’, INTERVAL 3 MONTH)

DATE_ADD(‘2018-05-25 21:31:27’, INTERVAL 4 HOUR)

DATE_SUB(‘2018-05-25’, INTERVAL 4 DAY)

Форматирование дат и времени

  • DATE_FORMAT(date, format) возвращает объект DATE или DATETIME, отформатированный с помощью шаблона format
  • TIME_FORMAT(date, format) возвращает объект TIME или DATETIME, отформатированный с помощью шаблона format

Обе функции в качестве второго параметра принимают строку форматирования или шаблон, который показывает, как оформатировать значение. Этот шаблон может принимать следующие значения:

  • %m : месяц в числовом формате 01..12
  • %с : месяц в числовом формате 1..12
  • %M : название месяца (January. December)
  • %b : аббревиатура месяца (Jan. Dec)
  • %d : день месяца в числовом формате 00..31
  • %e : день месяца в числовом формате 0..31
  • %D : номер дня месяца с суффиксом (1st, 2nd, 3rd. )
  • %y : год в виде двух чисел
  • %Y : год в виде четырех чисел
  • %W : название дня недели (Sunday. Saturday)
  • %a : аббревиатура дня недели (Sun. Sat)
  • %H : час в формате 00..23
  • %k : час в формате 0..23
  • %h : час в формате 01..12
  • %l : час в формате 1..12
  • %i : минуты в формате 00..59
  • %r : время в 12-ти часовом формате (hh:mm:ss AM или PM)
  • %T : время в 24-ти часовом формате (hh:mm:ss)
  • %S : секунды в формате 00..59
  • %p : AM или PM

DATE_FORMAT(‘2018-05-25 21:25:54’, ‘%d %M %Y’)

DATE_FORMAT(‘2018-05-25 21:25:54’, ‘%r’)

TIME_FORMAT(‘2018-05-25 21:25:54’, ‘%H:%i:%S’)

В качестве примера использования функций найдем заказы, которые были сделаны 5 дней назад:

SELECT * FROM Orders WHERE DATEDIFF(CURDATE(), CreatedAt) = 5;

Источник

Оцените статью