0

所以我有这个函数,它基本上接受一个整数的输入,并根据今天的日期,它可以追溯到那个“n”个月。例如,今天的日期是 2012 年 11 月 20 日。如果 'n' = 1,则返回 2012 年 10 月 20 日,依此类推。

我面临的问题是每个月份都在 2 月至 5 月之间,年份变量减一。例如,如果 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('-'));
};
4

1 回答 1

3

你的方法是不必要的复杂,必然容易出错。Date改用实例的内置溢出控制:

var n = 6;
var d = new Date();
d.setMonth(d.getMonth() - n);
于 2012-11-20T18:32:09.457 回答