好的,所以使用以下功能:
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);
...
}
我在控制台屏幕上为date_add(“12/08/1990”,1)获得以下输出
["12", "08", "1990"]
["2", "08", "1990"]
花了一个小时努力解决这个奇怪的问题,我一时兴起将功能改为:
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);
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;
}
至于函数的输入,我使用date_add('12/08/1990',1);
答案 0 :(得分:0)
原始代码的问题很可能是您没有使用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)中得到修复,请参阅此问题以获取更多信息: