当我尝试添加接近11月30日(任何一年)的日子时,我的代码表现得很有趣:
Date.prototype.addDays = function(days){
this.setDate(this.getDate() + days);
return this;
};
function calculateDate(string_date, days_to_add){
var arr, dat;
arr = string_date.split(" ");
dat = new Date(2013, (("enefebmarabrmayjunjulagosepoctnovdic".indexOf(arr[1])+3)/3), (((arr[0].charAt(0)!="0")?arr[0]:arr[0].substring(1))*1));
dat.addDays(days_to_add*1);
return (dat.getDate() + "/" + dat.getMonth() + "/"+dat.getFullYear());
}
现在如果我使用:
calculateDate("07 nov",24);
返回31/11/2013
(我的日程表示2013年11月停在30日)calculateDate("07 nov",25);
返回1/0/2014
我的代码似乎在任何其他月份和日期都能正常运行,那么为什么我的代码在11月到12月附近无法正常工作?让计算机产生感情并要求假期以便继续工作吗?
答案 0 :(得分:2)
Date
对象getMonth
是一个从零开始的索引:
请注意“十一月”有31天?
答案 1 :(得分:1)
在javascript Date
中,月份分数从零开始
所以11月是12月
答案 2 :(得分:1)
您的月份不是从零开始的,但它应该在JS Date
objects中。用它来创建日期对象:
dat = new Date(2013,
"enefebmarabrmayjunjulagosepoctnovdic".indexOf(arr[1])/3,
parseInt(arr[0], 10)
);
然后
return dat.getDate() + "/" + (dat.getMonth()+1) + "/" + dat.getFullYear();
答案 3 :(得分:0)
我认为问题在于您向indexOf()
添加了3。 indexOf('nov')
是32 + 1将是33.此外,Date.getMonth()
是0-11索引。
尝试类似:
Date.prototype.addDays = function(days){
this.setDate(this.getDate() + days);
return this;
}
function calculateDate(string_date, days_to_add){
var arr = string_date.split(' ');
var dat = new Date(2013, ('janfebmaraprmayjunjulaugsepoctnovdec'.indexOf(arr[1])+1)/3, +(arr[0].charAt(0) !== '0' ? arr[0] : arr[0].substring(1)));
dat.addDays(+days_to_add);
return (dat.getDate() + '/' + (dat.getMonth()+1) + '/' + dat.getFullYear());
}
有关工作示例,请参阅http://jsfiddle.net/PHPglue/V3hYQ/3/。当然,您的格式是日/月/年。
顺便说一下,你可以把+
放在一个字符串前面把它投射到一个数字。