Передача массива дат из контроллера в JavaScript в Laravel - PullRequest
0 голосов
/ 20 января 2019

У меня есть DatePicker в одном из моих представлений Laravel.Я пытаюсь передать массив дат в DatePicker из контроллера, чтобы эти даты были неактивны на странице (пользователь не должен иметь возможность бронировать эти даты).

Контроллер/ JavaScript

<?php

function show(Tour $tour) {
    $tourdates = DB::table('tourdates')
        ->join('tours', 'tourdates.tour_id', '=', 'tours.id')
        ->select('tourdates.tour_date')
        ->get();

    return view('tours.show', compact('tourdates'));
}
?>

<script>
    var disableddates = {!! json_encode($tourdates->toArray()) !!};

    function DisableSpecificDates(date) {
        var string = jQuery.datepicker.formatDate('mm/dd/yy', date);
        return [disableddates.indexOf(string) == -1];
    }

    var dateToday = new Date();
    $(function () {
        $("#datepicker").datepicker({
            numberOfMonths: 1,
            showButtonPanel: true,
            dateformat: "mm/dd/yy",
            minDate: dateToday,
            maxDate: "1Y + 1M + 1D",
            beforeShowDay: DisableSpecificDates
        });
    });
</script>

Даты, которые я прохожу, не становятся неактивными.Я думаю, это потому, что формат даты массива - гггг-мм-дд, а формат в DatePicker - мм / дд / гг.Тем не менее, я не могу это исправить.Есть предложения?

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Что я сделал, чтобы исправить проблему, так это то, что я отформатировал дату в контроллере, а не в блейде, и соответственно изменил свой javascript. Ниже приведен скорректированный код:

<?php

function show(Tour $tour) {
    $tourdates = DB::table('tourdates')
        ->join('tours', 'tourdates.tour_id', '=', 'tours.id')
        ->select('tourdates.tour_date')
        ->get();

    foreach ($tourdates as $td) {
            $tourdates1[] = date('m/d/Y', strtotime($td->tour_date));

    return view('tours.show', compact('tourdates'));
}
?>

<script>
    var disableddates = {!! json_encode($tourdates1) !!};

    function DisableSpecificDates(date) {
        var string = jQuery.datepicker.formatDate('mm/dd/yy', date);
        return [disableddates.indexOf(string) == -1];
    }

    var dateToday = new Date();
    $(function () {
        $("#datepicker").datepicker({
            numberOfMonths: 1,
            showButtonPanel: true,
            dateformat: "mm/dd/yy",
            minDate: dateToday,
            maxDate: "1Y + 1M + 1D",
            beforeShowDay: DisableSpecificDates
        });
    });
</script>
0 голосов
/ 20 января 2019

Попробуйте изменить формат, переданный на formatDate(), чтобы он соответствовал формату, используемому в массиве

Измените:

var string = jQuery.datepicker.formatDate('mm/dd/yy', date);

На

var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...