计算上个月

时间:2012-11-20 18:12:18

标签: javascript calendar

所以我有这个函数基本上是一个整数的输入,基于今天的日期,它可以追溯到'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('-'));
};

1 个答案:

答案 0 :(得分:3)

您的方法不必要地复杂且必然容易出错。请改用Date实例的内置溢出控件:

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