2014-03-25 54 views
1

原諒我在這裏和其他地方一般嘗試了幾個搜索,但似乎無法解決我現在有問題。有人可以幫我弄清楚嗎?以前的幾個季度在javascript

我想從JavaScript中的inputdate中找到季度字符串。對於「01/31/2009」,應根據給定的偏移量作爲輸入參數給出Q1,2013 Q4,2012等。當偏移量爲0,那麼當前這個季度,1,那麼前面的,然後2前2季度等等

我當前的代碼:jsfiddle

function getQuarterStrings(id) { 
    var d = new Date(); 
    var d = new Date("01/31/2009"); 
    var str; 
    switch (id) { 
... 
} 

剩餘代碼在的jsfiddle。正如你所看到的,即使一切似乎都沒問題,它仍然會失敗。請幫我弄清楚我的錯誤。謝謝!

+4

提示:使用console.log()調試,不alert() – j08691

+0

謝謝!我會記住。 – user704988

回答

1

一些你比較都被切斷,Date嘗試彌補幾個月來沒有那麼多天不當你setMonth。此代碼應該工作:

function getQuarterStrings(id) { 
    var d = new Date("03/31/2009"); 
    d.setDate(1); 
    d.setMonth(d.getMonth() - id * 3); 
    var month = d.getMonth() + 1; 
    var year = d.getFullYear(); 
    var quarter = Math.ceil(month/3); 
    return ("Q" + quarter + ", " + year); 
} 
+0

謝謝。以上代碼更改適用於我嘗試的所有日期。感謝您的幫助。 – user704988

0

還可以獲得通過這樣擺脫switch語句:

function getQuarterStrings(id) { 
    var d = new Date(); 
    var d = new Date("01/31/2009"); 
    var str; 
    if (id !== 0){ 
     d.setMonth(d.getMonth() - 3*id); 
    } 
    str = getQuarter(d); 
    return str; 
} 
+0

這很好,但結果仍然錯誤。不適用於「03/31/2014」 – user704988

1

這工作,並且是很多更簡潔。它還允許你使用任何偏移,而不是一組有限的值:

function getQuarterStrings(date, id) { 
    // quarter is 0-based here 
    var quarter = Math.floor(date.getMonth()/3), 
     year = date.getFullYear(); 
    quarter -= id; 

    if(quarter < 0) { 
     var yearsChanged = Math.ceil(-quarter/4); 
     year -= yearsChanged; 
     // Shift quarter back to a nonnegative number 
     quarter += 4 * yearsChanged; 
    } 

    return "Q" + (quarter + 1) + ", " + year; 
} 

http://jsfiddle.net/dPmf2/6/

+0

對不起,但代碼在日期「03/31/2009」中不起作用。可能與我原本面對的問題相同。 – user704988

+0

@ user704988好吧,那是因爲更改日期3個月不是更改宿舍的可靠方法。關鍵是要先找出季度,然後再基於此來計算。請嘗試我上面的更新的答案。 – JLRishe

+0

謝謝。我會試試這個。並感謝您花時間幫助我。 – user704988