jQuery datepicker,自定义范围怪癖

时间:2012-03-13 13:41:07

标签: jquery datepicker

我正在使用jQuery datepicker,其中包含从MySQL数据库收集的自定义日期范围集。查询生成的代码如下所示:

//<![CDATA[
$(window).load(function(){
    var ranges = [ { start: new Date(2012, 02, 14), end: new Date(2012, 03, 31) } ];            
    $(function() {    
        $("#datepicker").datepicker({
            numberOfMonths: 1,
            dateFormat: 'd MM, yy',
            beforeShowDay: function(date) {
                for(var i=0; i<ranges.length; i++) {
                    if(date >= ranges[i].start && date <= ranges[i].end) return [true, ''];
                }
                return [false, ''];
            },
            minDate: ranges[0].start,
            maxDate: ranges[ranges.length -1].end
        });
    });
});//]]> 

(这是查询的日期范围。)

我的问题是:

呈现日历时,由于某种原因,它决定在可选择的内容上添加一个月。 IE浏览器。如果您将结束日期设置为3月31日,它会将其更改为5月1日,或者如果您将其设置为2月2日,它将允许您选择截至3月1日。我试过通过从日期减去1个月来绕过这个,但当然这不起作用,因为月份有不同的天数,所以如果我在那里有3月31日,我不能简单地减去1个月作为第31个月2月不存在。

任何想法代码有什么问题?我很确定它是上面的jQuery代码!

您可以在http://bookingtest.walesdesign.com

看到示例

1 个答案:

答案 0 :(得分:5)

我认为问题在于您将结束日期设置为4月31日,这不存在(因此返回5月1日)。 请记住,月份从0(1月)到11(12月)。这可以在2月14日至3月28日期间正常工作

var ranges = [ { start: new Date(2012, 1, 14), end: new Date(2012, 2, 28) } ];             
$(function() {    
    $("#datepicker").datepicker({
        numberOfMonths: 1,
        dateFormat: 'd MM, yy',
        beforeShowDay: function(date) {
            for(var i=0; i<ranges.length; i++) {
                if(date >= ranges[i].start && date <= ranges[i].end) return [true, ''];
            }
            return [false, ''];
        },
        minDate: ranges[0].start,
        maxDate: ranges[ranges.length -1].end
    });
});