Работаем с датами в MySQL

Обновлено: 23 декабря, 2021

Вычитание даты от текущей

Следующий код позволяет вычислить разницу в днях между текущей датой, и датой в поле date_start таблицы tbl_sites

SELECT TO_DAYS(CURDATE())-TO_DAYS(date_start) FROM tbl_sites

Добавление текущей даты/времени при вставке записи

Для сохранения в таблице времени и даты добавления новой записи, необходимо создать новое поле таблицы в Time, где время будет храниться в Unix формате, либо поле TIMESTAMP, в котором время будет храниться в виде: “2013-09-17 15:00:00”.

Для первого случая (поле Time) для сохранения времени добавления записи используется функция time(). Код в данном случае будет выглядеть таким образом:

mysql_query(“INSERT INTO `my_table` (`pole1`,`pole2`,`pole3`,`time`) VALUES (‘string1′,’string2′,’string3’,'”.time().”‘)”);

Для второго случая (поле TIMESTAMP) используется параметр CURRENT_TIMESTAMP (текущее время). Соответственно код будет таким:

mysql_query(“INSERT INTO `my_table` (`pole1`,`pole2`,`pole3`,`time`) VALUES (‘string1′,’string2′,’string3’,CURRENT_TIMESTAMP)”);

Следует отметить, что при дальнейшей работе с этими полями, для вывода их значений в удобном виде, либо для подсчета разницы с каким либо значением времени, необходимо будет эти значения преобразовывать. Например, для того чтобы перевести значение TIMESTAMP в формат Unix-времени, необходимо воспользоваться процедурой strtotime(). Пример данного преобразования выглядит следующим образом (считаем количество секунд, прошедших с времени добавления записи в БД):

/*получаем данные из БД, а именно – время сообщения с ID равным 1, в формате TIMESTAMP */
$sql=mysql_query(“SELECT `time` FROM `my_table` WHERE `id` = ‘1’ LIMIT 1”);
$array=mysql_fetch_array($sql);
$my_time=$array[‘time’];
/*преобразуем время в удобный формат Unix time */
$my_time = strtotime($my_time);
echo $my_time();
$time_offset = time()-$my_time();

Группировка записей по дням, месяцам

Если необходимо, например, посчитать количество звонков по дням, или месяцам (в случаях когда одна запись – звонок), можно сделать следующим образом:

Считаем количество звонков по дням в период последние 30 дней:

SELECT DATE_FORMAT(date_time,”%d.%m.%Y”), count(*) FROM tbl_calls GROUP BY DATE_FORMAT(date_time,”%d.%m.%Y”) ORDER BY `date_time` DESC LIMIT 0,30

Считаем количество звонков по месяцам:

SELECT DATE_FORMAT(date_time,”%m.%Y”), count(*) FROM tbl_calls GROUP BY DATE_FORMAT(date_time,”%m.%Y”) ORDER BY `date_time`

Формат дат для функции FORMAT()

%a Сокращенное название дня недели на латинице (Sun to Sat)
%b Сокращенное название месяца на латинице (Jan to Dec)
%c Число месяца (0 to 12)
%D День месяца в виде числового значения, за которым следует суффикс на латинице (1st, 2nd, 3rd, …)
%d День месяца в виде числового значения (01 to 31)
%e День месяца в виде числового значения (0 to 31)
%f Миллисекунды (000000 to 999999)
%H Часы (00 to 23)
%h Час (00 to 12)
%I Час (00 to 12)
%i Minutes (00 to 59)
%j Нумерация дня в году (001 to 366)
%k Час (0 to 23)
%l Час (1 to 12)
%M Полное название месяца на латинице (January – December)
%m Название месяца как числовое значение (от 00 до 12)
%p AM или PM
%r Время в 12-часовом формате AM или PM (hh:mm:ss AM/PM)
%S Секунды (00 to 59)
%s Секунды (00 to 59)
%T Время в 24-часовом формате (hh:mm:ss)
%U Неделя, где воскресенье-первый день недели (с 00 до 53)
%u Неделя, где понедельник-первый день недели (с 00 до 53)
%V Неделя, где воскресенье-первый день недели (с 01 по 53). Используется с %X
%v Неделя, где понедельник-первый день недели (с 01 по 53). Используется с %X
%W Название дня недели полностью на латинице (Sunday – Saturday)
%w День недели, где воскресенье=0 и суббота=6
%X Год для недели, где воскресенье является первым днем недели. Используется с %V
%x Год для недели, где понедельник является первым днем недели. Используется с %V
%Y Год как числовое, 4-значное значение
%y Год как числовое, 2-значное значение
Рейтинг автора
Автор статьи
Юрий
SEO-аналитик, программист (PHP, Ajax, Delphi, MySQL).
Написано статей
268
6 оценок, среднее: 4,83 из 56 оценок, среднее: 4,83 из 56 оценок, среднее: 4,83 из 56 оценок, среднее: 4,83 из 56 оценок, среднее: 4,83 из 5 (6 оценок, среднее: 4,83 из 5)
Для того чтобы оценить запись, вы должны быть зарегистрированным пользователем сайта.
Загрузка...
Понравилась статья? Поделиться с друзьями:
Блог Программиста
Добавить комментарий

девятнадцать − 13 =