Итак, используя следующие функции:Странная проблема с Javascript Вовлечение split ("/");
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);
...
}
Волшебно, код работает снова. Теперь не поймите меня неправильно, я в восторге, что это сработало. Я серьезно обеспокоен , почему он работал, хотя, когда другой не сделал этого. Более или менее я просто обеспокоен тем, почему другой не работает. У кого-нибудь есть хорошее объяснение?
Редактировать: Теперь они оба сломаны. .>>
Для Томаса, вот полная функция:
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);
В каком браузере был это? Это звучит очень странно ... И FF, и Chrome дают мне тот же результат. И, конечно же, они ** уложили **. –
Не знаю, что вам сказать - я скопировал первый фрагмент кода в консоль firebug и получил тот же вывод в обоих журнальных сообщениях: '[" 12 "," 08 "," 1990 "]' –
Почему бы не использовать встроенный объект 'Date'? Или «у каждого года февраль имеет ровно 28 дней» - обязательная функция? – kennytm