奇怪的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。您发布的代码不会产生奇怪的结果。请发布更多关于此的代码,以便我们能够找到问题。