所以我有这个函数基本上是一个整数的输入,基于今天的日期,它可以追溯到'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 :(得分:3)
您的方法不必要地复杂且必然容易出错。请改用Date
实例的内置溢出控件:
var n = 6;
var d = new Date();
d.setMonth(d.getMonth() - n);