Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/40: Рейтинг темы: голосов - 40, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 22.01.2015
Сообщений: 126

Валидация формы (дата рождения)

02.03.2017, 09:03. Показов 7555. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую, пытаюсь при выборе месяца и года вычислить максимальное количество дней в месяце/году.
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    
<select title="День" id="date_birth_day">
     <option value="0" selected="1">День</option>
   <?
       $i = 1;
       while ($i <= 31){
       $value = $i++;   
       echo '<option value="'.$value.'">'.$value.'</option>';
       }
       unset($i,$value)
   ?>    
</select>
<select title="Месяц"  id="date_birth_year" onchange="date_birth_day_update();">
      <option value="0" selected="1">Месяц</option>
      <option value="1">Января</option>  
      <option value="2">Февраля</option>  
      <option value="3">Марта</option>  
      <option value="4">Апреля</option>  
      <option value="5">Мая</option>  
      <option value="6">Июня</option>  
      <option value="7">Июля</option>  
      <option value="8">Августа</option>  
      <option value="9">Сентября</option>  
      <option value="10">Октября</option>  
      <option value="11">Ноября</option>  
      <option value="12">Декабря</option>  
</select>
<select title="Год" id="date_birth_month" onchange="date_birth_day_update();">
      <option value="0" selected="1">Год</option>
     <?
         $i = date("Y", time()) - 17;
         while ($i >= 1900){
         $value = $i--; 
         echo '<option value="'.$value.'">'.$value.'</option>';
         }
        unset($i,$value)
      ?>          
</select>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function date_birth_day_update(){
var monthSel = document.getElementById('date_birth_month');
var daySel   = document.getElementById('date_birth_day');
var yearSel  = document.getElementById('date_birth_year');
var monthVal = monthSel.value;
var yearVal  = yearSel.value;
var daysInMonth = 31;
if (monthVal==2){daysInMonth = (yearVal%4==0 && (yearVal%100!=0 || yearVal%400==0)) ? 29 : 28;
}else if (monthVal==4 || monthVal==6 || monthVal==9 || monthVal==11){daysInMonth = 30;}
if(daySel.options.length > daysInMonth){ 
daySel.options.length = daysInMonth;}
while (daySel.options.length != daysInMonth){
daySel.options[daySel.length] = new Option(daySel.length+1, daySel.length+1, false);
}return;}
Подскажите, что делаю не так? Спасибо!

Добавлено через 17 минут
Извиняюсь, перепутал индификаторы. Но все же, почему-то не правильно рассчитываются дни

Добавлено через 6 часов 1 минуту
Не могу понять причину, при выборе февраля и года, пропадает в дате число 28 или вообще бывает не учитывается год.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.03.2017, 09:03
Ответы с готовыми решениями:

Дата рождения и знак задиака
Привет. Помогите пж написать сценарий, который по дате рождения человека определяет знак его зодиака. Заранее благодарю.

Дата рождения с помощью select и javascript
привет всем.У кого есть код, который генерирует дни месяца, названия месяца и года начиная с 1920. А то я столько &lt;option&gt; не хочу...

Валидация формы
Здравствуйте! Имеется скрипт при заполнении формы с полями ( имя, телефон, адрес). Если какое либо поле не заполнено или заполнено не...

4
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
02.03.2017, 09:35
HTML5
1
<select title="Месяц"  id="date_birth_year" onchange="date_birth_day_update();">
HTML5
1
<select title="Год" id="date_birth_month" onchange="date_birth_day_update();">
На айдишники обратите внимание.

Реализовать задуманное можно проще через JS-объект Date:
JavaScript
1
2
3
4
5
6
7
8
9
function date_birth_day_update(){
  var monthSel = document.getElementById('date_birth_month').value;
  var yearSel  = document.getElementById('date_birth_year').value;
  if (monthSel == 12) {monthSel = 0; yearSel++;}
  var date = new Date(yearSel, monthSel, 1);
  date.setDate(0);
  var maxDays = date.getDate();
  alert(maxDays);
}
Песочница: http://codepen.io/anon/pen/wJMYeo
1
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
02.03.2017, 09:44
gatti,
Цитата Сообщение от gatti Посмотреть сообщение
Подскажите, что делаю не так?
вообще всё делаете не так
во-первых, в javascript'e месяцы нумеруются с 0, т.е. январь -- это нулевой месяц, а декабрь -- одиннадцатый.

во-вторых, в объекте Date () уже "вшито" количество дней в каждом месяце с учётом високосных годов
а) ввёл пользователь корректную дату -- объект Date () вернёт введённое без изменений
б) если ввёл ошибочно 32 июня, которого не бывает ни в каком году (или 29 февраля в невисокосном 1999-м году), то оъект Date () всё это пересчитает и вместо 32 июня в первом случае вернёт 1 июля (а во втором случае вместо 29 февраля вернёт 1 марта
вот это и будет самой правильной проверкой валидности даты


и кстати, перепутали вы идентификаторы, а совсем не то, что вы написали

Добавлено через 1 минуту


Упс... долго я всё это писал... коллега Balanaar опередил
0
0 / 0 / 1
Регистрация: 22.01.2015
Сообщений: 126
02.03.2017, 10:43  [ТС]
Balanaar, благодарю, это понял. А как правильно select у дней корректировать, то есть если например выбран апрель, то в списке не должно быть 31.

Добавлено через 21 минуту
Все сам разобрался. Благодарю!
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
02.03.2017, 10:47
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function date_birth_day_update(){
  var monthSel = document.getElementById('date_birth_month').value;
  var yearSel  = document.getElementById('date_birth_year').value;
  if (monthSel == 12) {monthSel = 0; yearSel++;}
  var date = new Date(yearSel, monthSel, 1);
  date.setDate(0);
  var maxDays = date.getDate();
  var daySel = document.getElementById('date_birth_day');
  var selected = daySel.value;
  daySel.innerHTML = '<option value="0">День</option>';
  for (var i = 1; i <= maxDays; i++) {
    var sel = selected == i ? ' selected' : '';
    daySel.innerHTML += '<option value="'+i+'"'+sel+'>'+i+'</option>';
  }
}
http://codepen.io/anon/pen/ryxQJN
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.03.2017, 10:47
Помогаю со студенческими работами здесь

Валидация формы
Здравствуйте в JS есть два условия - если радиобаттон не выбран, то форма не отправляется и выводится текст с ошибкой. Но если...

Валидация формы
Здравствуйте. У меня есть простая форма с двумя полями. Если поля не заполнены, то форма отправляться не должна. Сделал это вот так: ...

Валидация формы
всем доброго времени суток. столкнулся с такой проблемой - нужно проверить на валидность данные, введенные пользователем. необходимо...

Валидация полей формы
Вечер добрый, требуется помощь. Ниже код, с простой валидацией полей формы, где кнопка &quot;submit&quot; становится активной после...

Валидация формы на Javascript
Всем привет!:) Необходимо доработать форму с валидацией. Для выбора даты и времени тег &lt;input&gt; с типом &quot;date&quot;,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru