Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的js日期在11月左右开始计算错误?_Javascript_Datetime - Fatal编程技术网

Javascript 为什么我的js日期在11月左右开始计算错误?

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月30日(任何一年)的天数时,我的代码表现得很有趣:

现在如果我使用:

  • 计算日期(“11月7日”,24日)返回
    2013年11月31日
    (我的日历上说2013年11月30日结束)
  • 计算日期(“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()
中添加了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。
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字体真的很烦人