Answer the question
In order to leave comments, you need to log in
PHP calendar output with COUNT(*) selection from MySQL database. How?
Good evening everyone.
During the implementation of the project, I encountered the following:
There is a table in which data is written, when recording, the date when this entry was made is indicated.
But you need to display a calendar of the current month indicating (next to each day of the month) the number of entries that were made on these days.
I can't implement it at all. I found the calendar on the Internet, but they do not have the necessary functionality (displaying the number of entries) and I can’t rewrite them in any way :(
UPD 1:
<?php
//Индивидуальные настройки скрипта
$ac_font_size = "10"; //Размер шрифта (только число)
$ac_font_color = "black"; //Цвет шрифта (в любом представлении: название, RGB, etc. [html-формат])
$ac_main_color = "white"; //Основной цвет календаря (Обычные дни) (аналогично цвету шрифта)
$ac_second_color = "silver"; //Второстепенный цвет календаря (аналогично цвету шрифта)
// (Текущий день, заголовок календаря)
$ac_navigator = false; //Вывод строки навигации по месяцам (true/false)
//Массив названий месяцев
$mon_name = array
(
"Январь", "Февраль", "Март", "Апрель", "Май", "Июнь",
"Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"
);
//Массив продолжительностей месяцев
$nod = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
//Определение месяца и года для календаря
if (!isset($month)) {
$ac_month = date("n");
$ac_year = date("Y");
$ac_j_dom = date("j");
$ac_j_dow = date("w");
} else {
list ($ac_month, $ac_year) = explode("-", $month);
if ($ac_year < 1980) $ac_year = 1980;
if ($ac_year > 2030) $ac_year = 2030;
if ($ac_month != date("n") or $ac_year != date("Y")) {
$ac_j_dom = 1;
$ac_j_dow = date("w", mktime(0, 0, 0, $ac_month, 1, $ac_year));
} else {
$ac_j_dom = date("j");
$ac_j_dow = date("w");
}
}
//Корректировка продолжительности февраля в високосном году
if ($ac_year % 4 == 0) {
$nod[1] = 29;
}
//Определение предыдущих/следующих месяцев/годов
$temp_month = $ac_month + 1;
if ($temp_month != 13) {
$ac_month_next = "$temp_month-$ac_year";
} else {
$temp_year = $ac_year + 1;
$ac_month_next = "1-$temp_year";
}
$temp_month = $ac_month - 1;
if ($temp_month != 0) {
$ac_month_prev = "$temp_month-$ac_year";
} else {
$temp_year = $ac_year - 1;
$ac_month_prev = "12-$temp_year";
}
$temp_year = $ac_year + 1;
$ac_year_next = "$ac_month-$temp_year";
$temp_year = $ac_year - 1;
$ac_year_prev = "$ac_month-$temp_year";
//Определение названия месяца
$ac_mon = $mon_name[$ac_month - 1];
//Корректировка номера дня недели из западно-европейской в русскую
if ($ac_j_dow == 0) $ac_j_dow = 7;
//Определение дня недели первого дня месяца
$ac_1_dow = $ac_j_dow - ($ac_j_dom % 7 - 1);
if ($ac_1_dow < 1) $ac_1_dow += 7;
if ($ac_1_dow > 7) $ac_1_dow -= 7;
//Определение числа дней месяца
$ac_nod = $nod[$ac_month - 1];
//Определение количества недель в месяце
$ac_now = 5;
if ($ac_1_dow - 1 + $ac_nod < 29) {
$ac_now = 4;
} else if ($ac_1_dow - 1 + $ac_nod > 35) {
$ac_now = 6;
}
//Предотвращение вывода текущего дня для нетекущего месяца
if ($ac_month != date("n") or $ac_year != date("Y")) $ac_j_dom = -10;
//Вывод шапки календаря
echo "
<table class='table table-bordered'>
<tr bgcolor=$ac_second_color>
<td colspan=7 align=center>
$ac_mon $ac_year
</td>
</tr>
<tr bgcolor=$ac_second_color>
<td>Пн</td><td>Вт</td><td>Ср</td><td>Чт</td><td>Пт</td><td>Сб</td><td>Вс</td>
";
//Вывод содержимого календаря
for ($i = 0; $i < $ac_now * 7; $i++) {
if ($i % 7 == 0) {
echo "</tr>\n<tr align=center bgcolor=$ac_main_color>\n\t";
}
if ($i - $ac_1_dow + 2 != $ac_j_dom) {
echo "<td>";
} else echo "<td bgcolor=$ac_second_color>";
if (($i < $ac_1_dow - 1) || ($i > $ac_nod + $ac_1_dow - 2)) {
echo " ";
} else {
$zzz = $i - $ac_1_dow + 2;
echo "$zzz";
}
echo "</td>\n\t";
}
//Строка навигации по месяцам
if (!$ac_navigator)
echo "
</tr>
</table>";
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question