Я пытаюсь реализовать FullCalendar, чтобы пользователи могли запросить полные дни, однако, несмотря на правильные даты, размещенные в базе данных, календарь не отображает правильные даты на передней части. < /p>
Например. Если я выберу 24-28 февраля (включительно, всего 5 дней), я получу подтверждение «Хотите запросить даты с 24.02.2025 до 28/02/2025», и когда я нажимаю OK Posts правильно (запустите 24-е место и конец 28 -го), но когда календарь обновляется, он показывает только 4 дня (24-27). p>
javascript с dashboard.php: < /p>
document.addEventListener('DOMContentLoaded', function () {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
initialView: 'dayGridMonth',
firstDay: 1,
editable: false,
selectable: true,
eventSources: [
{
url: "fetch-event.php",
method: "GET",
failure: function () {
alert("There was an error fetching events.");
}
}
],
select: function (selectionInfo) {
var start = selectionInfo.startStr;
var end = new Date(selectionInfo.end);
end.setDate(end.getDate() - 1);
var formattedStart = new Date(start).toLocaleDateString("en-GB");
var formattedEnd = new Date(end).toLocaleDateString("en-GB");
var confirmMessage = "Do you want to request dates from " + formattedStart + " to " + formattedEnd + "?";
if (window.confirm(confirmMessage)) {
var firstName = "";
var lastName = "";
fetch("request-event.php", {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
body: `start=${start}&end=${end.toISOString().split('T')[0]}&firstName=${encodeURIComponent(firstName)}&lastName=${encodeURIComponent(lastName)}`
})
.then(response => response.text())
.then(data => {
if (data.trim() === "1") {
displayMessage("Event request sent successfully!");
setTimeout(() => {
calendar.refetchEvents();
}, 500);
} else {
alert("Failed to request event.");
}
});
}
calendar.unselect();
}
});
calendar.render();
});
< /code>
request-event.php:
$start = isset($_POST['start']) ? $_POST['start'] : '';
$end = isset($_POST['end']) ? $_POST['end'] : '';
$firstName = isset($_POST['firstName']) ? trim($_POST['firstName']) : '';
$lastName = isset($_POST['lastName']) ? trim($_POST['lastName']) : '';
$start = date('Y-m-d', strtotime($start));
$end = date('Y-m-d', strtotime($end)); // Store `end` exactly as received
$eventTitle = "Requested by $firstName $lastName";
if (!empty($firstName) && !empty($lastName)) {
$query = "INSERT INTO events (title, start, end, allDay, approved) VALUES (?, ?, ?, 1, 0)";
$stmt = $conn->prepare($query);
$stmt->bind_param("sss", $eventTitle, $start, $end);
$stmt->execute();
$stmt->close();
echo "1"; // Success
} else {
die("Error: Name fields are empty.");
}
< /code>
fetch-event.php
$query = "SELECT id, title, start, end, allDay, approved FROM events";
$result = $conn->query($query);
$events = [];
while ($row = $result->fetch_assoc()) {
$events[] = [
"id" => $row["id"],
"title" => $row["title"],
"start" => $row["start"], // No modifications
"end" => $row["end"], // No modifications
"allDay" => (bool)$row["allDay"],
"approved" => $row["approved"]
];
}
$conn->close();
header('Content-Type: application/json');
echo json_encode($events ?: []);
Если я добавлю +1 день в fetch-event.php, чтобы заставить его работать на февраль, это нормально, но тогда будущие месяцы все еще на 1 день, вместо первоначального 2.
Я пытаюсь реализовать FullCalendar, чтобы пользователи могли запросить полные дни, однако, несмотря на правильные даты, размещенные в базе данных, календарь не отображает правильные даты на передней части. < /p> Например. Если я выберу 24-28 февраля (включительно, всего 5 дней), я получу подтверждение «Хотите запросить даты с 24.02.2025 до 28/02/2025», и когда я нажимаю OK Posts правильно (запустите 24-е место и конец 28 -го), но когда календарь обновляется, он показывает только 4 дня (24-27). p> javascript с dashboard.php: < /p> [code]document.addEventListener('DOMContentLoaded', function () { var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, { initialView: 'dayGridMonth', firstDay: 1, editable: false, selectable: true, eventSources: [ { url: "fetch-event.php", method: "GET", failure: function () { alert("There was an error fetching events."); } } ], select: function (selectionInfo) { var start = selectionInfo.startStr; var end = new Date(selectionInfo.end); end.setDate(end.getDate() - 1);
var formattedStart = new Date(start).toLocaleDateString("en-GB"); var formattedEnd = new Date(end).toLocaleDateString("en-GB");
var confirmMessage = "Do you want to request dates from " + formattedStart + " to " + formattedEnd + "?";
if (window.confirm(confirmMessage)) { var firstName = ""; var lastName = "";
$conn->close(); header('Content-Type: application/json'); echo json_encode($events ?: []); [/code] Если я добавлю +1 день в fetch-event.php, чтобы заставить его работать на февраль, это нормально, но тогда будущие месяцы все еще на 1 день, вместо первоначального 2.