2010-03-23 35 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