Как на JS проверить правильность введенной даты

rsv

Новичок
Как на JS проверить правильность введенной даты

Пользователь вводит дату в три поля (день, месяц, год)
Есть ли в JS готовый метод - типа на входе дата, а на выходе, он говорит существует такая дата или нет.
Проверить на пределы можно типа 1-12, 1-31, 1999-2004, а вот как проверить на 31 февраля 2003 года. Или писать таки скриптик для проверки самому?
 

MD

Guest
писать либо искать. ничего такого в яваскрипте нет, насколько мне известно.
 

гоша

Guest
d=32
m=2
y=2004

date=new Date(y, m, d)
alert([
date,
date.getDate(),
date.getMonth()+1,
date.getFullYear()
])

дальше сам
 

Lav

Guest
Есть извращённый способ.

У объекта Date есть методы из серии set/getDate (для дня месяца), set/getYear и т. д.

Если setDate передать число меньше 1 или больше числа дней в соотв. месяце, то дата перевалит в следующий/предыдущий месяц. При этом функция getDate выдаст значение, не равное переданному в setDate.

Отсюда можно плясать. Создаём объект Date и поочерёдно присваиваем ему год, месяц, день. Каждое присваивание проверяем соотв. get-методом. Если значение, переданное в set, не равно значению, полученному в get, значит, переданный параметр был неверен.

Код:
var dt = new Date();
dt.setYear(the_year);
if (the_year != dt.getYear) { // error! }
Ну и т. д.
 

гоша

Guest
Lav

вот мне интересно, зачем люди переписывают чужие ответы, да еще с ошибками

> if (the_year != dt.getYear) { // error! }

комментарий, по крайней мере, правильный ;)
 

Lav

Guest
гоша
Если посмотришь на время, то поймёшь, что писали мы одновременно.
И нечего придираться к навскидку написанному коду.

Финальный вариант:
Код:
the_month--;
var dt = new Date();
dt.setYear(the_year);
if (the_year != dt.getFullYear()) { alert('Wrong year!'); }
dt.setMonth(the_month);
if (the_month != dt.getMonth()) { alert('Wrong month!'); }
dt.setDate(the_day);
if (the_day != dt.getDate()) { alert('Wrong day!'); }
Личное: вообще, заявления о плагиате и прочих нарушениях законодательства лучше делать только после внимательного изучения вопроса. Я достаточно хорошо знаю JS, чтобы не передирать чужие ответы ради удовлетворения своего эго.
 
Сверху