2010-03-23 80 views
1

我有一些代码构建日期范围的数组。然后我调用一个函数(从jQuery UI日期选择器),传递一个日期,并将该日期与数组中的日期进行比较。我这样做是因为日期存储在cms中,这是我可以输出它们的唯一方法。Javascript数组的日期 - 没有正确迭代(jquery ui datepicker)

不幸的是,我的代码只检查数组中的第一个日期范围 - 我不明白为什么!我认为这可能很简单(/愚蠢!) - 如果任何人都可以阐明它,我会非常感激!

的代码如下 - 在六月至九月范围(PS1-PE1)工作正常,在12至1月被完全忽略...

<script type="text/javascript" language="javascript"> 

var ps1 = new Date(2010, 06-1, 18); // range1 start 
var pe1 = new Date(2010, 09-1, 03); // range1 end 
var ps2 = new Date(2010, 12-1, 20); // range2 start 
var pe2 = new Date(2011, 01-1, 02); // range2 end 

var peakStart = new Array(ps1,ps2); 
var peakEnd = new Array(pe1,pe2); 
function checkDay(date) { 
    var day = date.getDay(); 
    for (var i=0; i<peakStart.length; i++) { 
     if ((date > peakStart[i]) && (date < peakEnd[i])) { 
      return [(day == 5), '']; 
     } else { 
      return [(day == 1 || day == 5), '']; 
     } 
    } 
} 
</script> 

回答

2

Yaggo是非常正确的,但显然太简洁。

您想要将第二个return语句移到循环之外。

function checkDay(date) { 
    var day = date.getDay(); 
    for (var i=0; i<peakStart.length; i++) { 
     if ((date > peakStart[i]) && (date < peakEnd[i])) { 
      return [(day == 5), '']; 
     } 
    } 
    // it's not during a peak period 
    return [(day == 1 || day == 5), '']; 
} 
+0

非常感谢脑力激荡和Yaggo!这个解决方案的工作,也告诉我,我应该休息一下,因为现在很明显:)再次感谢你们 – PaulB 2010-03-23 22:09:58

2

你总是调用的for循环的第一次迭代回报。

+0

对不起,Yaggo,我不太明白 - 我应该在循环中编写一个变量然后将它返回到外部吗? – PaulB 2010-03-23 20:44:23

+0

好吧,我也试过这个(修改后的函数,其他变量/数组仍然存在),这使得第二个范围工作并忽略第一个! 函数checkDay(date,season){ \t var day = date.getDay(); \t var period =“”; \t为(VAR I = 0;我 peakStart [I])&&(日期 PaulB 2010-03-23 21:03:36

+0

对不起,无法格式化评论:-s – PaulB 2010-03-23 21:03:56