Цитата(fourty_fourty @ 20.1.2008, 19:51 ) | | Вроде и писал по учебнику! Почти что списывал! А работать все равно не хочет! |
Внимательнее нужно списывать ;). Регистр имеет значение - If, в отличие от if, не является оператором. И точка с запятой после последнего выражения в цикле for не нужна.
Но вообще лучше выбросьте этот учебник - похоже, он написан еще в прошлом веке (судя по getYear, который дает двузначный год, потому-то проверка на високосность и не работает, и куче глобальных переменных - похоже, автор учебника то ли сам не знал, как работает var, то ли не смог/не удосужился это объяснить).
А сама функция явно неверна - она всегда отсчитывает время от 1 января, игнорируя текущую дату, и почему-то "пропускает" ноябрь (NumOfDay[10]). И самое главное: зачем вообще NumOfDay и т.п., когда вся прелесть объекта http://wdh.suncloud.ru/js11.htm#ref311 в том, что можно переложить всю рутинную арифметику (включая проверку високосности) на него самого?
| Код | // вызываем ф-цию с параметрами - число и месяц рождения (месяц в привычном диапазоне 1-12) function tillBirthday(birthday,birthmonth) { var today = new Date(); // находим момент, соответствующий текущему времени в заданном дне рождения в текущем году // (с точностью до получаса, бОльшая точность ни к чему, поскольку нас интересуют дни) // получаем разность этого момента и текущего (в миллисекундах), делим на кол-во миллисекунд в сутках и округляем // если результат <0 - значит, день рождения в этом году уже был, берем следующий год и повторяем расчет // больше 2-х раз цикл не отработает var daysLeft = -1; for (var i=0; daysLeft<0; i++) { var birthdate = new Date(today.getFullYear()+i,birthmonth-1,birthday,today.getHours(),30,0); daysLeft = Math.round((birthdate-today)/86400000); } alert('Till Your Birthday: ' + daysLeft + ' days'); }
|
| Код | <input type="button" name="date" value="Birthday" onclick="tillBirthday(20,12);">
|
|