Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объект Date, Функция простая но все равно не работает 
:(
    Опции темы
fourty_fourty
Дата 20.1.2008, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 12.1.2008

Репутация: нет
Всего: нет



Вроде и писал по учебнику! Почти что списывал! А работать все равно не хочет! Даже по самой проблеме то сказать ни чего не могу, только что ошибка есть и все! =)

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  DateFuction.rar 1,03 Kb
PM MAIL ICQ   Вверх
SelenIT
Дата 21.1.2008, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Цитата(fourty_fourty @  20.1.2008,  19:51 Найти цитируемый пост)
Вроде и писал по учебнику! Почти что списывал! А работать все равно не хочет!

Внимательнее нужно списывать ;). Регистр имеет значение - If, в отличие от if, не является оператором. И точка с запятой после последнего выражения в цикле for не нужна.

Но вообще лучше выбросьте этот учебник - похоже, он написан еще в прошлом веке (судя по getYear, который дает двузначный год, потому-то проверка на високосность и не работает, и куче глобальных переменных - похоже, автор учебника то ли сам не знал, как работает var, то ли не смог/не удосужился это объяснить).

А сама функция явно неверна - она всегда отсчитывает время от 1 января, игнорируя текущую дату, и почему-то "пропускает" ноябрь (NumOfDay[10]). И самое главное: зачем вообще NumOfDay и т.п., когда вся прелесть объекта Date в том, что можно переложить всю рутинную арифметику (включая проверку високосности) на него самого?

Код

// вызываем ф-цию с параметрами - число и месяц рождения (месяц в привычном диапазоне 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);">



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0412 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.