代码之家  ›  专栏  ›  技术社区  ›  Nelson Ford

jquery用户界面datepicker自动更新的受限和可更改日期范围

  •  1
  • Nelson Ford  · 技术社区  · 14 年前

    我正在尝试获取我的日期选取器(jquery ui-datepicker),其中一个字段用于“签入”,另一个字段用于“签出”,以根据用户选择签入日期时通过Ajax拉入的最短时间(以秒为单位)来更新签出日期,但也允许更改选择。

    例如,我想在1月1日签入,所以签出字段将根据通过Ajax拉入的最少2592000秒(30天)更新到1月31日。但后来我改变了主意,决定改为在12月31日办理登机手续,所以应该让我把登机日期改为更早的日期,并自动将登机日期更新到1月30日。

    下面是我的带有注释掉位的代码,它几乎达到了我想要的效果,只是它不允许更改到更早的日期,而且我不确定如何将签出日期限制在签入后的最短时间内。通过Ajax拉入的数据还具有可用期,因此日历将可用天数显示为可选,已预订的天数显示为不可选。这部分工作得很好。有没有什么建议?

    $.ajax({
            url: "/ping/availability.php",
            data: "pid="+$('#pid').text(),
            dataType: "json",
            success: function(calendarEvents){
                var dates = $("#checkin, #checkout").datepicker({
                    changeMonth: true,
                    numberOfMonths: 1,
                    /*onSelect: function(selectedDate) {
                        var option = this.id == "checkin" ? "minDate" : "maxDate";
                        var instance = $(this).data("datepicker");
                        var date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings);
                        dates.not(this).datepicker("option", option, date);
                    },*/
                    dateFormat: 'M d, yy',
                    beforeShowDay: function (date){
                        for (i = 0; i < calendarEvents.length; i++) {
                            var b,e,c;
                            b = Date.parse(calendarEvents[i]['from']);
                            e = Date.parse(calendarEvents[i]['to']);
                            c = Date.parse(date);
                            if((c <= e && c >= b)) {
                                return [true,"ui-state-notbooked"];
                            }
                        }
                        return [false, "ui-state-booked"];//disable all other days
                    }
                });
            }
        });
    

    Ajax数据示例,以秒为单位显示可用周期和最小预订长度:

    [{"from":"Tue, 01 Feb 2011 00:00:00 -0800","to":"Fri, 30 Sep 2011 00:00:00 -0700","min":7776000}]