- Вывод записей из БД по дням (по месяцам)
- Как получить все дни между датами в PHP
- Количество дней между датами
- Формирование массива, содержащий все дни из интервала
- Результат:
- Функция на основе strtotime
- Результат:
- Отчет по датам php
- Вывод данных в зависимости от одной даты в году
- Пример скрипта : вывод информации в зависимости от определенной одной даты!
- Как выводить информацию, картинку в зависимости от нескольких дат!?
- Выводить информацию в зависимости от дня в разнобой даты.
- Автоматическое изменение количества лет на сайте php
- Результат «Автоматическое изменение количества лет на сайте php»
- автоматическое изменение количества лет на сайте php вывод в div
- Делаем отображение статистики за день, неделю месяц и все время PHP простой и удобный способ
- Как выводить данные из базы данных, по дате?
Вывод записей из БД по дням (по месяцам)
В сегодняшней статье рассмотрим возможность вывода какой-либо информации из базы данных (посты, логи, комментарии, регистрации и т.д.) по дням (или по месяцам). То бишь записи будут выводиться некими блоками, каждый отдельный блок — какой-то конкретный промежуток времени (день, месяц, год).
В этот раз нам понадобится всего один файл, в котором мы будет писать код. Но и без библиотек тоже не обойдёмся, посему, как и всегда, начинаем в подключения библиотеки для работы с базой данных:
setDatabaseName( DATABASE_NAME )->setCharset( CHARSET ); // Подключение к БД ?>
Ниже создаю простую HTML-структуру с блоком posts, в котором я выведу все посты из БД по дням:
Список постов
Механизм до неприличия прост: на каждой итерации цикла мы будем сравнивать дату текущего поста и дату предыдущего. Если даты совпадают — значит продолжаем выводить записи из БД, если же не совпадают — распечатываем новую дату, тем самым создавая новый временной блок и отделяя его от предыдущего.
Итак, делаю запрос к БД (для статьи я добавил таблицу posts с тремя полями, она нам и понадобится сейчас), а далее создаю цикл while:
query( "SELECT * FROM `posts` ORDER BY `time` DESC LIMIT 15" ); while ( $row = $result->fetchAssoc() ) < // Тут продолжим писать код >?>
В переменную $current_day записываю дату текущего поста в формате дд.мм.гггг:
$current_day = date( 'd.m.Y', $row['time'] );
Если записи нужно выводить не по дням, а по месяцам — значит убираем дни из шаблона (мм.гггг):
$current_day = date( 'm.Y', $row['time'] );
Затем просто сравниваем текущую дату с предыдущей. Если они не совпадают — выводим текущую дату:
if ( $current_day != $prev_day ) < $prev_day = $current_day; print '' . $current_day . ''; >
После такой проверки можно смело печатать саму запись (в моём случае — текст поста):
print '' . $row['text'] . '
' . date( 'd.m.y H:i:s', $row['time'] ) . '';
И на этом этапе уже можно идти проверять работу скрипта:
setDatabaseName( DATABASE_NAME )->setCharset( CHARSET ); // Подключение к БД ?> Список постов query( "SELECT * FROM `posts` ORDER BY `time` DESC LIMIT 15" ); while ( $row = $result->fetchAssoc() ) < $current_day = date( 'd.m.Y', $row['time'] ); if ( $current_day != $prev_day ) < $prev_day = $current_day; print '' . $current_day . ''; > print '' . $row['text'] . '
' . date( 'd.m.y H:i:s', $row['time'] ) . ''; > ?>
- 5id15
- 15.07.2022
- 1 837
- 1
- 0
Как получить все дни между датами в PHP
Несколько примеров как найти все дни в промежутке между двумя датами в виде значения и списка.
Количество дней между датами
$date_1 = '28.03.2022 00:00'; $date_2 = '02.04.2022 23:59'; $seconds = abs(strtotime($date_1) - strtotime($date_2)); echo round($seconds / 86400, 1); // 6
$date_1 = '28.03.2022 00:00'; $date_2 = '02.04.2022 18:00'; $seconds = abs(strtotime($date_1) - strtotime($date_2)); echo round($seconds / 86400, 1); // 5.6
Формирование массива, содержащий все дни из интервала
Первый способ – использование классов DatePeriod, DateTime и DateInterval (доступны с версии PHP 5.3).
* Если в конечной дате не указать время (23:59), то в результирующем массиве не будет последнего дня.
$period = new DatePeriod( new DateTime('28.03.2022'), new DateInterval('P1D'), new DateTime('02.04.2022 23:59') ); $dates = array(); foreach ($period as $key => $value) < $dates[] = $value->format('d.m.Y'); > print_r($dates);
Результат:
Array ( [0] => 28.03.2022 [1] => 29.03.2022 [2] => 30.03.2022 [3] => 31.03.2022 [4] => 01.04.2022 [5] => 02.04.2022 )
Функция на основе strtotime
function get_dates($start, $end, $format = 'd.m.Y') < $day = 86400; $start = strtotime($start . ' -1 days'); $end = strtotime($end . ' +1 days'); $nums = round(($end - $start) / $day); $days = array(); for ($i = 1; $i < $nums; $i++) < $days[] = date($format, ($start + ($i * $day))); >return $days; > $dates = get_dates('28.03.2022', '02.04.2022'); print_r($dates);
Результат:
Array ( [0] => 28.03.2022 [1] => 29.03.2022 [2] => 30.03.2022 [3] => 31.03.2022 [4] => 01.04.2022 [5] => 02.04.2022 )
Отчет по датам php
Первым шагом вы должны естественно определиться, что вам требуется!?
Например каждая дата повторяется каждый месяц, кроме 31(через месяц) и 29 февраля
или же каждый год уникальная дата, будет показываться 1 раз в год.
Либо же сделать условие. что вообще в зависимости от даты, 29 февраля данные будут показываться каждые 4 года.
Поэтому самое логичное в переменную получить то, что нам требуется! Например функция date нам позволяет это сделать!
Если нам требуется уникальная дата в году, то тогда создадим переменную, которая будет генерировать сегодняшний день вместе с месяцем.
И далее нам остается создать условие, в котором будем проверять этот день, подробнее смюниже:
Вывод данных в зависимости от одной даты в году
Из выше приведенных данных нам нужно создать условие для вывода данных в определенную дату, дата может быть вообще любая!
Выбираем дату, пусть это будет 23 февраля
Создаем условие вывода информации в зависимости от даты:
Во внутрь ставим например простой вывод строки через echo:
И соответственно, что код будет срабатывать только один раз в году. 23 февраля.
Пример скрипта : вывод информации в зависимости от определенной одной даты!
Как выводить информацию, картинку в зависимости от нескольких дат!?
Предположим, что нам нужно выводить какую-то информацию в зависимости от нескольких дат!
Предположим, что это будет период времени от 25 декабря до 10 января, мы пойдем хитрым путем мы в условии пропишем если это месяц равен 1, то это январь( date(‘m’)==1 ) и дата меньше или равно 10 date(‘d’) , точно такое повторяем с декабрем
И далее выводим требуемую информацию в зависимости от нескольких дат, соберем весь код вместе:
По данному принципу унас на сайте выводится информация в зависимости от даты.
Выводить информацию в зависимости от дня в разнобой даты.
Предположим, что нам требуется выводить какую-то информацию в зависимости от даты в разнобой!
Опять помещаем в переменную нашу дату:
Создаем массив с датами, в которые дни нам требуется что-то выводить;
И нам еще будет нужна функция in_array, которая и проверит присутствие сегодня в нашем массиве.
$days_array = array(«01-01» , «20-05» , «30-05» );
if (in_array( $today, $days_array )) < Действие >
Автоматическое изменение количества лет на сайте php
Страница выводится по поисковому запросу :»Автоматическое изменение количества лет на сайте php«, чтобы разобраться в данном вопросе нам понадобится:
Когда вы говорите — «Автоматическое изменение количества лет на сайте php» — что конкретно вы имеете ввиду, потому, что такое можно понять неоднозначно.
Если вам нужен вывод текущего года, то это делается очень просто! нам понадобится :
+ Один из вариантов вывода на экран echo
Результат «Автоматическое изменение количества лет на сайте php»
Выше идущий пункт — это лишь часть изначального вопроса:
автоматическое изменение количества лет на сайте php вывод в div
Вообще с вопросом : «автоматическое изменение количества лет на сайте php» — надеюсь выше вы разобрались. теперь с выводом в div.
Здесь немного мне непонятно, а какая разница вывода вообще в любую часть html? А если выводить в тег span(или в любой другой тег?), то это бюудет отличаться? Ну да ладно. бог с вами. вернемся к вопросу «автоматическое изменение количества лет на сайте php вывод в div».
Берем выше использованный код и помещаем его в div, единственная загвоздка, которая может вам встретиться — это включить php в html(если у вас не включено)
Делаем отображение статистики за день, неделю месяц и все время PHP простой и удобный способ
Перед нами стоит задача сформировать статистику платежей за текущий день, неделю, месяц и все время, предварительно дату платежа мы записываем в бд в формате UnixTime, но если дата сохранена в человеко-понятном формате, этот способ так же подходит
Создаем цикл для перебора всех платежей, если платежей очень много, можно ограничиться датой за пару месяцев (date > time()-5259486) 5259486 — 2 месяца в Unixtime формате
$result = $db->query("SELECT * FROM pay WHERE status = 2"); // Статус - 2 успешный платеж, можно формировать по своим данным в таблицах while($row = $result->fetch_assoc()) < // Запускаем цикл для переборки данных $u_balance = $u_balance + $row['sum']; // За все время $you_date_day = date('d.m.Y', $row['date']); // Дата с бд $now_date_day = date('d.m.Y'); // Текущая дата $you_date_unix_day = strtotime($you_date_day); $now_date_unix_day = strtotime($now_date_day); $you_date_week = date('W.m.Y', $row['date']); // Дата с бд $now_date_week = date('W.m.Y'); // Текущая дата $you_date_unix_week = strtotime($you_date_week); $now_date_unix_week = strtotime($now_date_week); $you_date_month = date('M.Y', $row['date']); // Дата с бд $now_date_month = date('M.Y'); // Текущая дата $you_date_unix_month = strtotime($you_date_month); $now_date_unix_month = strtotime($now_date_month); if ($you_date_unix_day == $now_date_unix_day)< // За текущий день $u_balance_day = $u_balance_day + $row['sum']; >if ($you_date_unix_week == $now_date_unix_week) < // Зе текущую неделю $u_balance_week = $u_balance_week + $row['sum']; >if ($you_date_unix_month == $now_date_unix_month) < // За текущий месяц $u_balance_month = $u_balance_month + $row['sum']; >>
Итог:
Разбор данных
$you_date_day = date('d.m.Y', $row['date']); // Дата с бд $now_date_day = date('d.m.Y'); // Текущая дата
Формат дат должен быть аналогичный, в нашем случе вытягиваем с бд дату в UnixTime, если она хранится иначе, ее можно сразу использовать в функции strtotime(), таким образом мы получаем диапазон Unixtime даты и благодаря этому можем провести подсчет за текущий день таким образом:
if ($you_date_unix_day == $now_date_unix_day)< // За текущий день $u_balance_day = $u_balance_day + $row['sum']; >
Соответственно с другими примерами работает все точно так же
$you_date_week = date('W.m.Y', $row['date']); // дата за текущую неделю $now_date_week = date('W.m.Y');
Если сегодня у нас воскресенье, мы получим такую дату: 06.02.2021, почему 06?
00 — Понедельник
01 — Вторник
03 ..
04 ..
05 ..
06 — Воскресенье
Таким образом мы сформировали статистику на нашем сайте.
- Сергей Котов
- 14.02.2021
- 6 577
- 1
- 12
Как выводить данные из базы данных, по дате?
Доброй ночи.
Подправьте код в вопросе, чтобы легче было читать.
Используйте оператор WHERE в запросе к таблице базы данных.
Дмитрий, Здравствуйте. Подправил. Проблема в том, что значение из бд не приходит, то есть запрос проходит, но значение не возвращается. Использую запрос WHERE
$result=mysql_query("SELECT * FROM income_expense_history ")
$data = $_GET["date"]; if(isset($data))< $result = mysql_query("SELECT * FROM income_expense_history WHERE time = $data"); >else
Попробуйте так. Во-первых input в форме должен иметь name (допустим day). Чтобы поле в $_GET[‘day’] приходило.
if(isset($_GET['day']) < $date = new DateTime( $_GET['day'] ); $dateTimstamp = $date->getTimestamp(); > $result=mysql_query("SELECT * FROM income_expense_history WHERE `date`(как у вас поле называется)= $dateTimstamp");
Здравствуйте. Спасибо за ответ, проблема в том, что значение из бд не приходит, то есть запрос проходит, но значение не возвращается
KevinSmash, откройте инструмент разработчика, f12 (ctrl+shisft+i в хроме), обновите страницу и во вкладке network посмотрите запрос к БД.
Обычно, если ошибка, он выделяется красным. Во вкладке response будет ошибка.
Не обижайтесь, но Ваш код — mysql_query уже безнадежно устарел.
Внимание Данное расширение устарело, начиная с вер.
Так что может быть все, что угодно
$result = mysql_query( ваш запрос ); if (!$result) < die('Неверный запрос: ' . mysql_error()); > if(mysql_num_rows($res) > 0) < while($row = mysql_fetch_assoc($res)) < echo ' $row['income'] . перечисляете нужные поля $row['поле с датой'] ' > >
dk-web, когда проверяю через инструмент разработчика, то запрос приходит на эту же страницу. Приходит в responce сама страница и её код. Никаких ошибок нет
KevinSmash, тогда дайте больше информации о структуре файлов. где форма, где обработчик.
Так очень сложно вам помочь. Вообще, если про дату забыть, код то работает?
$data = $_GET["date"]; //echo $data; if(isset($data))< $result = mysql_query("SELECT * FROM income_expense_history WHERE time = $data"); >else < $result = mysql_query("SELECT * FROM income_expense_history"); >//$result - ассоциированный массив, т.е. таблички, у которой есть названия столбцов //узнаем, сколько в массиве $result строчек $n=mysql_num_rows($result); //вывод на страничку в виде таблицы echo " Время Приход Расход Комментарий Автор "; //вывод построчно for($i=0;$i<$n;$i++) echo ",mysql_result($result,$i,time), " ",mysql_result($result,$i,income), " ",mysql_result($result,$i,expense), " ",mysql_result($result,$i,comment), " ",mysql_result($result,$i, author), " "; echo "
"; ?>
Это запрос на выборку из базы.
И при этом запросе значений приходят пустые как на втором скриншоте
$result = mysql_query("SELECT * FROM income_expense_history WHERE time = $data"); if (!$result)
нужно посмотреть какую ошибку выдает.
Потом. Надо стивить или одинарный кавычки или `,
Ладно, сейчас докрутим. Последний вопрос. Дайте пример как хранится дата в базе данных.
2019-02-03 00-00-00? Вы сказали timestamp, но тут могут быть нюансы.
dk-web, В базе поле time: 2019-05-13 19:59:06. Тип: timestamp. По умолчанию: CURRENT_TIMESTAMP.
Сделал как вы написали, ошибка: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near » at line 1
$data = $_GET["date"]; if(isset($data)) < $result = mysql_query(SELECT * FROM `income_expense_history` WHERE DATE(`time`) = $data); if (!$result) < die('Неверный запрос: ' . mysql_error()); >>else < $result = mysql_query("SELECT * FROM `income_expense_history`"); > if(mysql_num_rows($res) > 0) < while($row = mysql_fetch_assoc($res)) < echo ' $row['income'] . перечисляете нужные поля $row['time'] ' > >