Консультация № 159787
06.02.2009, 19:23
0.00 руб.
0 9 1
Здравствуйте. Я хочу сделать проверку на правильность ввода дат на ява скрипт т.е. есть два текстовых поля в 1-е вводится дата ,в формате ,2009-02-14 во второе 2009-03-14 мне надо , что бы был правильный ввод - это значит,что дата в 1-м поле была более ранняя чем во втором поле (сейчас введено правильно) , какие функции ява скрипт для этого можно использовать и вообще как лучше организовать проверку ?
Спасибо.

Обсуждение

Неизвестный
06.02.2009, 19:44
общий
это ответ
Здравствуйте, Dima1967!
Конвертируя даты в формат UNIX timestamp(временная метка UNIX, то есть, число секунд от 00:00:00 01-01-1970) и сравнивая их, можно легко добиться проверки на правильность ввода.
Методика сравнения такая:
var date1 = Date.parse("гггг,мм,дд");// Первая дата. пробовал указывать дефисы - не получается, javascript упорно любит запятые.
var date2 = Date.parse("гггг,мм,дд");// Вторая дата.
// на выходе получаем даты в миллисекундах, и их можно сравнивать путем применения знаков <>.
if (date1 > date2)
{
// если первая дата БОЛЬШЕ второй, что явно неправильно, делаем какие-то действия по недопущению подобной ситуации.
}
В теге FORM можем указать атрибут onsubmit, в котором прописать сей вышеуказанный код. А также остальные проверки. Чтобы форма не отправлялась на сервер с перезагрузкой страницы, а с помощью AJAX, в конце onsubmit`а надо написать return false;
Сравнение можно производить при отправке формы. Пожалуй, это самый разумный вариант. Есть возможность проверять по событию onChange - но это уже громоздкий вариант.

С уважением, Товарищ Бородин
давно
Старший Модератор
31795
6196
06.02.2009, 20:52
общий
Товарищ Бородин & Dima1967:


Зачем так заморачиватся? Если у Вас нет нужной функции или та которая есть работает не так как Вы хотите - напишите её.
Даты вводятся как строка(дефисы, запятые, точки или двоеточие - разницы никакой, при желании можно привести к одному формату или просто игнорировать их). Что-то типа:
Код:
function checkdata(x,y)
{
if (x.length<>y.length)
{
сообщение об ошибке и аварийный выход
}
else
{
for (var i=0;i<x.length;i++)
{
if (x[i]>y[i]){ заканчиваем проверку, т.к. дата Х больше даты У, т.е. даты введены правильно}
else{if (x[i]<y[i]){ неверно введены даты } }
}
если равно продолжаем проверку
}
}

За синтаксис сильно не пинайте, т.к давно уже не писал на скрипте, но думаю сам алгоритм ясен.
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
06.02.2009, 23:08
общий
Господа, кажется, вы оба перемудрили

Ежели там два [i]текстовых[/i] поля, то, опуская проверки на правильность ввода, проверка "больше/меньше" выглядит просто вот так:

var dateString1 = document.getElementById("dateInput1").value;
var dateString2 = document.getElementById("dateInput2").value;

if(dateString1 > dateString2)
{
alert("ага.. счаззз...");
return false;
}


Неизвестный
06.02.2009, 23:13
общий
А разве строчные значения поддаются такому сравнению?
Неизвестный
06.02.2009, 23:43
общий
а то! ещё как поддаются.
Неизвестный
06.02.2009, 23:52
общий
Нет, секунду, я, видимо, немного не так спросил... Разве Javascript определяет на лету, является ли некое строчное значение датой??? Если да, то я тогда не удивляюсь, если он их и сравнивать умеет...
Неизвестный
07.02.2009, 04:29
общий
А, нет, конечно, нет. Там просто сравнение двух стрингов. Тот же вариант, что и у Профессора Зенченко Константина Николаевича, только без цикла (а зачем цикл если Javascript и так умеет строки сравнивать?)

Javascript в дату конвертирует только строки определённого вида. Например "Jan 21, 2009" -- именно "MMM dd, yyyy" или "MMMM dd, yyyy" и именно по-английски. Если Вы передадите в строке значение "Янв 21, 2009", то получите NaN.

Попробуйте вот этот код

var d = new Date("Jan 21, 2009");
alert(d);

Неизвестный
07.02.2009, 06:44
общий
Да зачем, мы же уже разобрались... Все нормально, спасибо.
Неизвестный
07.02.2009, 11:10
общий
Извините, привычка
Форма ответа