Работя върху календар, използвайки собствен код, в момента мога да получа дати, които да се показват като booked
само ако са в рамките на един и същи месец.
Как да накарам нещата да работят, ако датите преминават през повече от един месец?
Това са основните променливи, които настройват календара (които идват преди моя цикъл while):
//Labels
$dayLabels = array("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
$dayMiniLabels = array("Mon","Tue","Wed","Thu","Fri","Sat","Sun");
$monthLables = array("January","February","March","April","May","June","July","August","September","October","November","December");
//max values
$maxDays = 7;
$maxMonths = 12;
//stats
$forceMonth = $_GET['m'];
$forceYear = $_GET['y'];
$todayDate = date("d-m-Y");
$todayDate = date("d-m-Y", strtotime($todayDate));
$explodeToday = explode("-", $todayDate);
$currentDay = $explodeToday[0];
if(isset($forceMonth)) {
$currentMonth = $forceMonth;
} else {
$currentMonth = $explodeToday[1];
};
if(isset($forceYear)) {
$currentYear = $forceYear;
} else {
$currentYear = $explodeToday[2];
};
$currentDate = strtotime("01-$currentMonth-$currentYear");
$prevMonth = sprintf("%02d", $currentMonth - 1);
$nextMonth = sprintf("%02d", $currentMonth + 1);
$prevYear = sprintf("%02d", $currentYear - 1);
$nextYear = sprintf("%02d", $currentYear + 1);
$daysInMonth = cal_days_in_month(CAL_GREGORIAN, $currentMonth, $currentYear);
$firstDayofMonth = date("D", $currentDate);
$firstDayofMonth = array_search($firstDayofMonth, $dayMiniLabels);
$firstDayofMonth = $firstDayofMonth;
//database values
$bookedStart = array();
$bookedEnd = array();
$bookedUser = array();
if($getBookings = $con->prepare("SELECT userID,bookingStart,bookingEnd FROM bookings WHERE machineID=?")) {
$getBookings->bind_param("i", $_GET['id']);
if($getBookings->execute()) {
$getBookings->bind_result($bookingUserID,$bookingStart,$bookingEnd);
while($getBookings->fetch()) {
array_push($bookedStart, $bookingStart);
array_push($bookedEnd, $bookingEnd);
array_push($bookedUser, $bookingUserID);
};
};
};
$getBookings->close();
//counters
$daysIntoMonth = 0;
$dayCounter = 0;
$startMonth = 0;
Това е текущият код за показване на календара (нещата, които отпечатват календара):
<table class="full grid dayLabels">
<tr>
<?php
foreach($dayLabels as $day) {
echo '<td class="day"><p>' .$day. '</p></td>';
};
?>
</tr>
</table>
<table id="calendar" class="full grid calendar">
<?php
while($daysIntoMonth < $daysInMonth) {
//days into month
$daysIntoMonth++;
$temp_intoMonth = sprintf("%02d", $daysIntoMonth);
$daysIntoMonth = $temp_intoMonth;
//days into week
$dayCounter++;
$temp_dayCounter = sprintf("%02d", $dayCounter);
$dayCounter = $temp_dayCounter;
//current calendar date
$calDate = date('d-m-Y', strtotime($daysIntoMonth. '-' .$currentMonth. '-' .$currentYear));
$calTime = strtotime($calDate);
$todaysNumber = date('w', $timeCal);
if($dayCounter == 1) {
echo '<tr>';
};
if($firstDayofMonth != 7) {
while($startMonth < $firstDayofMonth) {
echo '<td class="padding"></td>';
$startMonth++;
$dayCounter++;
$temp_dayCounter = sprintf("%02d", $dayCounter);
$dayCounter = $temp_dayCounter;
};
};
if($startKey = in_array($calDate, $bookedStart, true)) {
$booked = true;
echo '
<td class="booked">
<p class="date">' .$daysIntoMonth. '</p>
</td>
';
} else if(in_array($calDate, $bookedEnd, true)) {
$booked = false;
echo '
<td class="booked">
<p class="date">' .$daysIntoMonth. '</p>
</td>
';
} else if($booked == true) {
echo '
<td class="booked">
<p class="date">' .$daysIntoMonth. '</p>
</td>
';
} else {
echo '
<td>
<p class="date">' .$daysIntoMonth. '</p>
</td>
';
};
if($dayCounter == $maxDays) {
echo '</tr>';
$dayCounter = 0;
};
};
?>
</table>
В момента търся начална дата, за да задам променливата booked
променлива като true
, докато не попадна на end date
. Това означава, че календарът ще работи само за дати, които се съдържат в рамките на същия месец...
Как да накарам датите да работят през месеците?