Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   валидность даты (https://javascript.ru/forum/events/29223-validnost-daty.html)

зверек 20.06.2012 11:12

валидность даты
 
Помогите, плиз!
юзер вводит в поле дату в формате dd/mm/yyyy
Дата вводится по маске (спасибо jquery), так что проверять правильность вводимого формата не надо. Но надо проверить, а дату ли он ввел. То есть число 87/45/3445 - не дата. А 01/12/1899 - дата.
И если не дата, надо пополнить массив ошибок err.push("не корректная дата")
На php такую проверку сделать - раз плюнуть: checkdate(). А вот в jscript опыта у меня мало. Не знаю, как сделать. А хочется именно на стороне клиента максимум ошибок выявить, чтобы не перегружать форму лишний раз.

walik 20.06.2012 11:50

var d = '87/45/3445';
if (new Date(d) == 'Invalid Date')
   alert('Ne pravilino');

зверек 20.06.2012 12:05

не работает. Даже приведенный пример не работает :(

Deff 20.06.2012 12:31

<input id="Date" type="text" value="11/12/1999" onchange="onchangeTest()">

<script type="text/javascript">
function onchangeTest(){
str=document.getElementById('Date').value;
 var err=["не корректная дата"]
 function TstDate(){
   str2=str.split("/");
   if(str2.length!=3){return false;}
   str2=str2[2] +'-'+ str2[1]+'-'+ str2[0];
   if(new Date(str2)=='Invalid Date'){return false;}
   return str;
 }

 var S=TstDate()
 if(S){err.splice(0,1);
   alert(str);
 } else alert(err);

}
</script>

зверек 20.06.2012 12:47

Да, это работает. Сама уже после первого примера прочитала, что дата в new Date() в определенном формате должна входить.

Спасибо большое walik и Deff ! Помогли.

Luchik 19.10.2016 14:12

Такая проверка не отбрасывает даты типа "30 февраля", new Date() делает их 1 марта и пишет что всё ок.

Aetae 19.10.2016 22:26

Luchik, верно.
Под данный конкретный случай и чтоб наверняка надо как-то так:

<input id="Date" type="text" value="11/12/1999" onchange="alert( isValidDate(this.value) )">
<script type="text/javascript">
function isValidDate(str){
  var input = str.match(/\d+/g),
      date = new Date(input[2], input[1] - 1, input[0]);

  return date.getFullYear() == input[2] &&
         date.getDate()     == input[0] &&
         date.getMonth()    == input[1] - 1;
}
</script>


Часовой пояс GMT +3, время: 06:56.