2012-11-20 141 views
0

所以我有這個函數,基本上需要輸入一個整數,並基於今天的日期,它回到'n'個月。因此,例如今天的日期是2012年11月20日。如果'n'= 1,那麼它將返回2012年10月20日,依此類推。上個月計算

我面臨的問題是萬季月份在2月至5月之間,年份變量減去1。例如,如果n = 6,它應該返回2012年5月20日,而是返回到2011年5月20日。

我認爲這可能是一個閏年問題,但是當我用n = 18進行測試時,它2010年5月20日歸還,而不是2011年5月20日和2011年不是閏年。

有沒有人知道我可以在這裏做什麼來避免這種情況?

lastNmonths = function(n) { 
    var date = new Date(); 

    if (n <= 0) 
     console.log([date.getFullYear(), date.getMonth() + 1 , date.getDate()].join('-')); 

    var years = Math.round(n/12); 
    var months = n % 12; 


    if (years > 0) 
     date.setFullYear(date.getFullYear() - years); 

    if (months > 0) { 
     if (months >= date.getMonth()) { 
      date.setFullYear(date.getFullYear()); 
      months = 12 - months; 
      date.setMonth(date.getMonth() + months); 
     } else { 
      date.setMonth(date.getMonth() - months); 
     } 
    } 


    console.log([date.getFullYear(), date.getMonth() + 1, date.getDate()].join('-')); 
}; 
+0

您應該可以簡單地使用'setMonth',它將爲您調整年份。 'date.setMonth(date.getMonth() - 12)'將在12個月前。 – Shmiddty

回答

3

你的方法是不必要的複雜和必然容易出錯。使用Date實例的內置溢出控制代替:

var n = 6; 
var d = new Date(); 
d.setMonth(d.getMonth() - n); 
+3

我要發佈類似的東西,所以相反,有這個小提琴:http://jsfiddle.net/9qtNs/ – Shmiddty

+0

@Shmiddty很好。 – PointedEars