Javascript 为什么我的js日期在11月左右开始计算错误?
当我尝试添加接近11月30日(任何一年)的天数时,我的代码表现得很有趣: 现在如果我使用:Javascript 为什么我的js日期在11月左右开始计算错误?,javascript,datetime,Javascript,Datetime,当我尝试添加接近11月30日(任何一年)的天数时,我的代码表现得很有趣: 现在如果我使用: 计算日期(“11月7日”,24日)返回2013年11月31日(我的日历上说2013年11月30日结束) 计算日期(“11月7日”,25日)返回1/0/2014 我的代码似乎在其他月份和日期都能正常工作,那么为什么我的代码在11月到12月之间不能正常工作呢?计算机是否已经发展出感觉并要求休假以保持工作?在javascript日期中,月份分数是以零为基础的 因此,第11个月是12月,在javascript
计算日期(“11月7日”,24日)代码>返回
(我的日历上说2013年11月30日结束)2013年11月31日
计算日期(“11月7日”,25日)代码>返回
1/0/2014
我的代码似乎在其他月份和日期都能正常工作,那么为什么我的代码在11月到12月之间不能正常工作呢?计算机是否已经发展出感觉并要求休假以保持工作?在javascript
日期中,月份分数是以零为基础的
因此,第11个月是12月,在javascript中,月分数是以零为基础的
因此第11个月是12月日期
对象是一个从零开始的指数:
注意“十一月”有31天吗?日期对象是一个从零开始的索引:
注意“十一月”有31天吗?您的月份不是以零为基础的,但应该是以JS为单位的。使用此选项创建日期对象:
dat = new Date(2013,
"enefebmarabrmayjunjulagosepoctnovdic".indexOf(arr[1])/3,
parseInt(arr[0], 10)
);
然后
return dat.getDate() + "/" + (dat.getMonth()+1) + "/" + dat.getFullYear();
您的月份不是以零为基础的,但它应该是JS格式的。使用此选项创建日期对象:
dat = new Date(2013,
"enefebmarabrmayjunjulagosepoctnovdic".indexOf(arr[1])/3,
parseInt(arr[0], 10)
);
然后
return dat.getDate() + "/" + (dat.getMonth()+1) + "/" + dat.getFullYear();
我认为问题是在
indexOf()
中添加了3indexOf('nov')
is 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());
}
有关工作示例,请参见。当然,您的格式是日/月/年
顺便说一句,你可以把
+
放在一个字符串前面,把它转换成一个数字。我想问题是你在索引()中加了3。
indexOf('nov')
is 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());
}
有关工作示例,请参见。当然,您的格式是日/月/年
顺便说一下,您可以将
+
放在字符串前面,将其转换为数字。您想删除+3
。month参数是以零为基的。您想使用一个简单的parseInt(arr[0],10)
来代替日期((x+3)/3)-1)
是的,谢谢……它只相当于(x/3)
:-)您想删除+3
。month参数是以零为基的。您想使用一个简单的parseInt(arr[0],10)
而不是一天的复杂表达式((x+3)/3)-1)
是的,谢谢…这相当于(x/3)
:-)和dat.getMonth()+1
,谢谢您的建议,数学仍然是错误的,但你是对的。PHPglue是对的。作为回报,dat.getMonth()+1
,谢谢你的建议,效果非常好。数学仍然是错误的,但你是正确的。PHPglue说得对。@PHPglue:这很烦人,seriously@PHPglue字体真的很烦人