Обновлено: 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-значное значение |