Значение переменной JS из массива PHP, НЕ приводящее к значениям всего массива

#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 = []; Это работает только с одним массивом.