jquery日期picker beforeShowDay工作错误的月份

jquery datepicker beforeShowDay works for wrong month?

本文关键字:错误 工作 日期 picker beforeShowDay jquery      更新时间:2023-09-26

我正在使用jquery的日期选择器来选择日期,我想突出显示一些日期-但是我遇到了一个奇怪的问题与beforeShowDay

当页面加载时,似乎加载了json数据,但是当我单击输入框并出现日期拾取器时,没有突出显示任何内容。当我点击前一个月或后一个月,从前一个月的数据被加载(例如点击输入-> datepicker出现->无高亮显示->点击下一个月->数据从前一个月出现高亮显示)…

我已经谷歌了很长时间了,检查数据是否在一切之前加载,但不知何故,这种行为并没有改变。两个日期选择器都会遇到同样的问题。

(jquery-ui datepicker 1.10.1, jquery 1.9.1)

我很高兴每一个提示!

var resDates;
var done = false;
function markDate(date) {
    var ret = [true, 'free'];
    if (!done) {
        $.ajax({
            dataType: "json",
            url: "modules/OutShop/getReservations.php",
            data: {item_id: $("#item-id").val()},
            async: false,
            success: function (dates) {
                resDates = dates;
                done = true;
            }
        });
    }

    $.each(resDates, function(key, value) {
        var d = (date.getFullYear() + "-" + ("0" + date.getMonth()).slice(-2) + "-" + ("0" + date.getDate()).slice(-2));
        if (d == value["day"]) {
        //$("body").append("d: " + d + ", v: " + value["day"] + ", s: " + value["status"] + "  ");
        //$("body").append("s: " + value["status"] + "  ");
            if (value["status"] == "1")
                ret = [false, 'marked'];
            else if (value["status"] == "2")
                ret = [false, 'reserved'];
            else
                ret = [true, 'free'];
        }
    });
    return ret;
}
$(document).ready(function() {

    if (!done) {
        $.ajax({
            dataType: "json",
            url: "modules/OutShop/getReservations.php",
            data: {item_id: $("#item-id").val()},
            async: false,
            success: function (dates) {
                resDates = dates;
                //done = true;
            }
        });
    }
    $("#item-datepicker-min").datepicker({
        showButtonPanel: true,
        defaultDate: +3,
        minDate: +3,
        beforeShowDay: markDate,
        onSelect: function(selectedDate) {
            $("#item-datepicker-max").datepicker("option", "minDate", selectedDate);
        }
    });
    $("#item-datepicker-max").datepicker({
        showButtonPanel: true,
        minDate: +3,
        defaultDate: +6,
        beforeShowDay: markDate,
        onSelect: function(selectedDate) {
            $("#item-datepicker-min").datepicker("option", "maxDate", selectedDate);
        }
    });
});

编辑这是我从ajax响应中获得的一个示例json对象。

[{"状态":3,"天":"2013-04-10"},{"状态":3,"天":"2013-04-11"},{"状态":3,"天":"2013-04-12"},{"状态":3,"天":"2013-04-13"},{"状态":2,"天":"2013-04-10"},{"状态":2,"天":"2013-04-11"},{"状态":2,"天":"2013-04-12"},{"状态":2,"天":"2013-04-13"}]

看起来您的月份偏移了1,javascript方法date.getMonth()返回月份以零为基础(例如。1月为0,2月为1),PHP脚本以正常格式返回日期(Jan为1,Feb为2)

检查

所以如果你改变

var d = (date.getFullYear() + "-" + ("0" + date.getMonth()).slice(-2) + "-" + ("0" + date.getDate()).slice(-2));

var d = (date.getFullYear() + "-" + ("0" + date.getMonth()+1).slice(-2) + "-" + ("0" + date.getDate()).slice(-2));

你应该得到正确的月份显示