2015-10-14 90 views
0

我希望根據用戶選擇的範圍獲得以前的月份範圍。例如,如果用戶選擇:July-2015至September-2015。我可以使用下面的對象獲取數字月份值。如何在JavaScript中使用兩年的時間範圍內的月份範圍

var months = {January: 1, February: 2, March: 3, April: 4, May: 5, June: 6, July: 7, August: 8, September: 9, October: 10, November: 11, December: 12}; 

那麼我可以用這樣的邏輯來弄清楚之前的範圍 - http://jsfiddle.net/0cq5nprt/

var currStartMonth = 7, 
    currEndMonth = 9, 
    monthRange = (currEndMonth - currStartMonth) + 1, 
    prevStartMonth = currStartMonth - monthRange, 
    prevEndMonth = (prevStartMonth + monthRange) - 1; 

我遇到的問題是,當範圍是在兩年所以它就像跨度:December- 2014年至2015年1月。這裏應該是2014年10月至2014年11月。

希望我的問題很清楚。任何建議將非常有幫助!

+0

什麼預期效果? – charlietfl

+0

2014年10月到2014年11月。我只是在尋找月份的範圍,年份並不重要,但它將我的邏輯搞砸了:( – habibg

回答

0

我想你應該在你的計算中使用年份。像下面的東西。

var yearDiff = endYear - currentYear 
if yearDiff = 0 { 
    monthRange = (currEndMonth - currStartMonth) + 1, 
    prevStartMonth = currStartMonth - monthRange, 
    prevEndMonth = (prevStartMonth + monthRange) - 1; 
} else { 
    calcEndMonth = calcEndMonth + 12 
    monthRange = (calcEndMonth - currStartMonth) + 1, 
    prevStartMonth = curgstartmonth - monthRange, 
    prevEndMonth = (prevStartMonth + monthRange) - 1; 
    if prevEndMonth > 12 { 
     prevEndYear = curEndYear - 1 
     prevEndMonth = prevEndMonth - 12 
    } 
} 

考慮您的示例12 - 2014年一月至2015年

var yearDiff = endYear - currentYear 
// yearDiff = 2015 - 2014 = 1 

{ 
    calcEndMonth = calcEndMonth + 12 
    //calcEndMonth = 1 + 12 = 13 

    monthRange = (calcEndMonth - currStartMonth) + 1, 
    //monthRange = (13 - 12) + 1 = 2 

    prevStartMonth = curStartmonth - monthRange, 
    //prevStartMonth = 12 (December) - 2 = 10(October) 

    prevEndMonth = (prevStartMonth + monthRange) - 1; 
    //prevEndMonth = (10 + 2) - 1 = 11(November) 

    if prevEndMonth > 12 { 
     prevEndYear = curEndYear - 1 
     prevEndMonth = prevEndMonth - 12 

    } 
+0

感謝分享!你能解釋一下你的代碼嗎?'calcEndMonth',curgstartmonth? – habibg

+0

@habibg更新說明請注意,在上面的例子中,我認爲年差爲1,因此在calcEndMonth中加上12,如果可能超過一年,那麼必須添加12 * yearDiff並相應地更改邏輯。 – PK20

相關問題