奇怪的Javascript问题,涉及拆分(“/”);

奇怪的Javascript问题,涉及拆分(“/”);,javascript,Javascript,好的,那么使用以下函数: function date_add(date, days) { var dim = {1:31, 2:28, 3:31, 4:30, 5:31, 6:30, 7:31, 8:31, 9:30, 10:31, 11:30, 12:31}; console.log(date.split("/")); var date_arr = date.split("/"); console.log(date_arr); ... } function date_ad

好的,那么使用以下函数:

function date_add(date, days)
{
  var dim = {1:31, 2:28, 3:31, 4:30, 5:31, 6:30, 7:31, 8:31, 9:30, 10:31, 11:30, 12:31};
  console.log(date.split("/"));
  var date_arr = date.split("/");
  console.log(date_arr);
  ...
}
function date_add(date, days)
{
  var dim = {1:31, 2:28, 3:31, 4:30, 5:31, 6:30, 7:31, 8:31, 9:30, 10:31, 11:30, 12:31};
  console.log(date);
  console.log(date.split("/"));
  date_arr = date.split("/");
  console.log(date)
  if (date_arr[0][0] = "0") date_arr[0] = date_arr[0][1];
  if (date_arr[1][0] = "0") date_arr[1] = date_arr[1][1];
  var month = parseInt(date_arr[0]);
  var day   = parseInt(date_arr[1]);
  var year  = parseInt(date_arr[2]);
  console.log(month);
  console.log(day);
  console.log(year);

  if ((year%4 == 0 && year%100 != 0) || year%400 == 0)
    dim[2] = 29;

  day += days;
  while (day < 1)
  {
    month--;
    if (month < 1)
    {
      month = 12;
      year--;
    }
    day += dim[month];
  }

  while (dim[month] < day)
  {
    day -= (dim[month]+1);
    month++;
    if (month > 12)
    {
      month = 0;
      year++;
    }
  }

  return ""+month+"/"+day+"/"+year;
}
我在控制台屏幕上获得以下日期添加的输出(“12/08/1990”,1)

我花了一个小时努力解决这个奇怪的问题,一时兴起,我将我的函数改为:

function date_add(date, days)
{
  var dim = {1:31, 2:28, 3:31, 4:30, 5:31, 6:30, 7:31, 8:31, 9:30, 10:31, 11:30, 12:31};
  date = date.split("/");
  console.log(date);
  ...
}
神奇的是,代码再次工作。别误会,我很高兴它能起作用。但是,我很担心为什么它能起作用,而另一个没有。或多或少我只是关心为什么另一个不起作用。有人有好的解释吗

编辑:现在它们都坏了。>>

对于Tomas,以下是完整的功能:

function date_add(date, days)
{
  var dim = {1:31, 2:28, 3:31, 4:30, 5:31, 6:30, 7:31, 8:31, 9:30, 10:31, 11:30, 12:31};
  console.log(date.split("/"));
  var date_arr = date.split("/");
  console.log(date_arr);
  ...
}
function date_add(date, days)
{
  var dim = {1:31, 2:28, 3:31, 4:30, 5:31, 6:30, 7:31, 8:31, 9:30, 10:31, 11:30, 12:31};
  console.log(date);
  console.log(date.split("/"));
  date_arr = date.split("/");
  console.log(date)
  if (date_arr[0][0] = "0") date_arr[0] = date_arr[0][1];
  if (date_arr[1][0] = "0") date_arr[1] = date_arr[1][1];
  var month = parseInt(date_arr[0]);
  var day   = parseInt(date_arr[1]);
  var year  = parseInt(date_arr[2]);
  console.log(month);
  console.log(day);
  console.log(year);

  if ((year%4 == 0 && year%100 != 0) || year%400 == 0)
    dim[2] = 29;

  day += days;
  while (day < 1)
  {
    month--;
    if (month < 1)
    {
      month = 12;
      year--;
    }
    day += dim[month];
  }

  while (dim[month] < day)
  {
    day -= (dim[month]+1);
    month++;
    if (month > 12)
    {
      month = 0;
      year++;
    }
  }

  return ""+month+"/"+day+"/"+year;
}
功能日期\u添加(日期,天)
{
var dim={1:31,2:28,3:31,4:30,5:31,6:30,7:31,8:31,9:30,10:31,11:30,12:31};
控制台日志(日期);
console.log(日期分割(“/”);
日期=拆分日期(“/”);
console.log(日期)
如果(date_arr[0][0]=“0”)date_arr[0]=date_arr[0][1];
如果(日期[1][0]=“0”)日期[1]=日期[1][1];
var月=parseInt(日期为[0]);
var day=parseInt(日期[1]);
var年=parseInt(日期为[2]);
控制台日志(月);
控制台日志(天);
对数(年);
如果((第%4年==0和第%100年!=0)| |第%400年==0)
dim[2]=29;
天+=天;
而(第1天)
{
月--;
如果(月份<1)
{
月=12;
年--;
}
天+=暗[月];
}
while(暗[月]<日)
{
日-=(日[月]+1);
月份++;
如果(月份>12)
{
月份=0;
年份++;
}
}
返回“+月+”/“+日+”/“+年”;
}

至于函数的输入,我使用
date\u add('12/08/1990',1)从控制台调用了这个函数

原始代码的问题很可能是您没有在
parseInt()
调用中使用第二个参数,即指定要转换为的基数,默认情况下它假定为10个基数,但当数字以零开始时(如
08
情况下),则它假定为八进制数,因此,解决方案是在parseInt调用中使用第二个参数,如下所示:

var month = parseInt(date_arr[0], 10);
var day   = parseInt(date_arr[1], 10);
var year  = parseInt(date_arr[2], 10);
此行为已在最新版本的javascript(EcmaScript 5)中修复,有关更多信息,请参阅此问题:


这是在哪个浏览器中?听起来很奇怪。。。FF和Chrome都给了我相同的结果。当然,他们应该告诉你。不知道该告诉你什么-我将第一个代码片段复制粘贴到firebug控制台,并在两个日志消息中得到完全相同的输出:`[“12”,“08”,“1990”]`为什么不使用内置的
日期
对象?或者“每年的二月正好有28天”是必需的功能吗?@KennyTM它不是必需的(事实上,一旦我得到了年份……也就是在这一点之后,如果是闰年,我就把它改为29天)。我来看看。这看起来很简单。。。现在他们都破产了。这可能是chrome的问题吗?我会调出Firefox。我使用的是Chrome v5.0.375.55,@Sean。您发布的代码不会产生奇怪的结果。请发布更多关于此的代码,以便我们能够找到问题。