Главная

Вывод записей из БД по дням (по месяцам)

В сегодняшней статье рассмотрим возможность вывода какой-либо информации из базы данных (посты, логи, комментарии, регистрации и т.д.) по дням (или по месяцам). То бишь записи будут выводиться некими блоками, каждый отдельный блок — какой-то конкретный промежуток времени (день, месяц, год).

В этот раз нам понадобится всего один файл, в котором мы будет писать код. Но и без библиотек тоже не обойдёмся, посему, как и всегда, начинаем в подключения библиотеки для работы с базой данных:

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

Несколько примеров как найти все дни в промежутке между двумя датами в виде значения и списка.

Читайте также:  Построить график функции java

Количество дней между датами

$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, которая и проверит присутствие сегодня в нашем массиве.

Читайте также:  Php http response content

$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 — Воскресенье

Читайте также:  What is python list comprehension

Таким образом мы сформировали статистику на нашем сайте.

  • Сергей Котов
  • 14.02.2021
  • 6 577
  • 1
  • 12

Источник

Как выводить данные из базы данных, по дате?

slo_nik

Доброй ночи.
Подправьте код в вопросе, чтобы легче было читать.
Используйте оператор WHERE в запросе к таблице базы данных.

Дмитрий, Здравствуйте. Подправил. Проблема в том, что значение из бд не приходит, то есть запрос проходит, но значение не возвращается. Использую запрос WHERE

slo_nik

$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

FanatPHP

Попробуйте так. Во-первых 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"; 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), "
"; ?>

Это запрос на выборку из базы.
И при этом запросе значений приходят пустые как на втором скриншоте5cdae5391fe0e956023281.jpeg 5cdae542cd596674687393.jpeg

$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']

Источник

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