对于以下代码,
$(function() {
a = new Date("2008-1-2");
monthDiff = function(now, then) {
var months;
months = (now.getFullYear() - then.getFullYear()) * 12;
months -= then.getMonth() + 1;
months += now.getMonth();
return months;
};
intervalToDate = function(interval, start, unit) {
{
return {
day: function() {return new Date(start.getTime() + (interval*24*60*60*1000)); },
week: function() {return new Date(start.getTime() + (interval*7*24*60*60*1000)); },
month: function() {
// the result value below will not return a date object when running (only an object), what is weird is in the debug console, using the line below will totally return a date object.
var result = new Date(start.getTime() + interval*4*7*24*60*60*1000);
while (monthDiff(result, start) !== interval) {
result += 24*60*60*1000;
}
return result;
} ,
year: function() {
return start.getFullYear() + interval;
}
}[unit]();
}
};
console.log(intervalToDate(20, a, "day"));
console.log(intervalToDate(20, a, "week"));
console.log(intervalToDate(20, a, "month"));
console.log(intervalToDate(20, a, "year"));
})
这一行:
month: function() {
// the result value below will not return a date object when running (only an object), what is weird is in the debug console, using the line below will totally return a date object.
var result = new Date(start.getTime() + interval*4*7*24*60*60*1000);
结果将在调试控制台中正确返回。但在运行时,不知何故它不再是日期对象,因此当我尝试对其调用 getFullYear 函数时,我遇到了“无方法错误”。
最佳答案
您要向日期对象添加整数值result += 24*60*60*1000;
,您必须使用日期方法来添加时间,而不仅仅是进行简单的添加。
示例:
result.setMilliseconds(result.getMilliseconds() + (24*60*60*1000));
关于javascript 日期对象丢失了其类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13881826/