2012-03-13 64 views
1

我正在使用jQuery datepicker,具有从MySQL数据库收集的一组自定义日期范围。查询得到的代码如下所示:jQuery datepicker,自定义范围怪癖

//<![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日,或者如果将其设置为!st Feb,则可以在3月1日之前选择结束日期。我已经尝试通过从日期减去1个月来解决这个问题,但是当然这不起作用,因为月份有不同的天数,所以如果我有3月31日在那里,我不能简单地减去1个月作为第31次2月不存在。

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

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

+1

的JavaScript'Date'使用基于0的月指标(如果你问我这是愚蠢的)......月份为0,二月是1,... – zzzzBov 2012-03-13 15:30:45

回答

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 
    }); 
}); 
+0

谢谢你的帮助!我没有意识到,从0-11月份开始。所以我认为我需要找到一种方法将日期的PHP版本(May = 5)转换为日期的jQuery版本(May = 4)。有没有共同的方式来做到这一点?或者我只需要编写一个PHP脚本,该脚本将从 - 月份开始? – 2012-03-13 15:51:24

+1

@KevinSmith在做-1我认为是可以接受的。 :) – 2012-03-13 15:52:09