#javascript #php #arrays
#javascript #php #массивы
Вопрос:
Я разрабатываю веб-сайт по аренде летнего домика для отдыха с календарем Jquery datepicker, который отключает недоступные даты на основе запроса MySQL.
<?php
$datos = $con->query("SELECT * FROM bookings WHERE Status = 'Accepted' ");
?>
Для вычисления отключенных дат на основе диапазона дат (проверка — checkout) Я использую PHP-код, который вычисляет промежуточные даты, а затем помещает эти значения в массив следующим образом:
<?php
while ($user = mysqli_fetch_array($datos)) {
?>
<?php
// Declare two dates
$Date1 = $user['Check_in'];
$Date2 = $user['Check_out'];
// Declare an empty array
$array = [];
// Use strtotime function
$Variable1 = strtotime($Date1);
$Variable2 = strtotime($Date2);
// Use for loop to store dates into array
// 86400 sec = 24 hrs = 60*60*24 = 1 day
for ($currentDate = $Variable1; $currentDate <= $Variable2;
$currentDate = (86400)) {
$Store = date('Y-m-d', $currentDate);
$array[] = $Store;}
// Display the dates in array format
$finalvalue = $array;
// Write it to the output
echo json_encode($finalvalue);?> <?php }?>
?>
выводит значение $finalvalue:
["2019-04-03","2019-04-04","2019-04-05","2019-04-06","2019-04-07",
"2019-04-08","2019-04-09","2019-04-10","2019-04-11", "2019-04-12","2019-04-13","2019-04-14"]
["2019-04-24","2019-04-25"]
//////
Теперь в моем JS для datepickers:
var disabledDates = <?= json_encode($finalvalue)?>;
console.log(disabledDates)
////// по какой-то причине finalvalue$ выводит только:
["2019-04-24","2019-04-25"]
$("#checkin").datepicker({
changeMonth: false,
dateFormat: 'yy-mm-dd',
defaultDate: new Date(),
minDate: new Date(),
beforeShowDay: function (date) {
var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
return [disabledDates.indexOf(string) == -1]
},
prevText: '<i class="fa fa-chevron-left"></i>',
nextText: '<i class="fa fa-chevron-right"></i>',
onSelect: function (selected) {
$("#checkout").val(selected);
$("#checkout").datepicker("option", {minDate: new Date(selected)})
calcDiff();
}
});
Почему JS не выводит всю строку дат, как в первом выводе PHP?
Ответ №1:
Может быть, вы передаете переменную в виде строки в кодировке JSON, но не анализируете эти данные в массив Javascript? Что, если бы вы сделали что-то вроде
var disabledDates = JSON.parse(<?= json_encode($finalvalue)?>);
Комментарии:
1. Только что попробовал ваш код, но теперь он не выводит никаких значений.
2. Просто внимательно посмотрел на ваш вывод для
$finalvalue
. У вас там есть 2 массива. У одного из них есть первые 12 дат, а у второго — последние 2. Это ошибка форматирования в вашем вопросе или ошибка в коде?3. Я только что понял, что если я удалю: // Объявлю пустой массив $array = []; Это работает только с одним массивом.