2009-10-29 3 views
0

У меня есть специальный валидатор, который указывает на скрипт на стороне клиента для проверки текстового поля.Дата сравнения в javascript

Мой день и время разделены на два текстовых поля: одно с датой в формате мм/дд/гггг, а другое со временем в формате hh: mm am/pm.

Мне нужно убедиться, что текстовые поля вместе не больше, чем сейчас. Как я могу это сделать?

Вот что у меня есть. Что я делаю не так?

function checkminutes(sender, args) { 
     var txtdate = $get('<%=FormView1.FindControl("txtdate").ClientID %>'); 
     var txttime = $get('<%=FormView1.FindControl("txttime").ClientID %>'); 
     var totaltime = txtdate.value + ' ' + txttime.value; 
     totaltime = Date(totaltime); 
     var d = new Date(); 
     if (totaltime > d) { 
      args.IsValid = false; 
     } 
     else { 
      args.IsValid = true; 
     } 


    } 

Это ответ, который работал.

function checkminutes(sender, args) { 
     var txtdate = $get('<%=FormView1.FindControl("txtdate").ClientID %>'); 
     var txttime = $get('<%=FormView1.FindControl("txttime").ClientID %>'); 
     var totaltime = txtdate.value + ' ' + txttime.value; 
     totaltime = Date.parse(totaltime); 
     var d = new Date(); 
     if (totaltime > d) { 
      args.IsValid = false; 
     } 
     else { 
      args.IsValid = true; 
     } 
    } 
+1

Я чувствую, что я сказал это миллион раз. Убедитесь, что вы проверяете серверную сторону, так как любая проверка на стороне клиента может быть обойдена. Таким образом, я использовал ограничение на 140 символов в Twitter. – geowa4

ответ

1

Просто сравните миллисекунды с эпохи:

totaltime = new Date("1988/02/21 08:08"); 
d = new Date(); 
if (totaltime.getTime() < d.getTime()) 
    alert("Date is valid"); 
else 
    alert("Try again, Date is not valid"); 

EDIT: Я не могу заставить его работать, когда я использую «AM/PM», так что просто преобразовать его в 24 раз, и все будет хорошо.

+0

. но посмотрите, что я сделал в разделе «Редактировать» выше. – Eric

0

Не тратьте время проверки этого на стороне клиента. Это никогда не будет надежным, и неважно, что вам все равно придется проверять на серверной стороне.

+2

неправда, это не пустая трата времени, но он должен делать как – TStamper

+0

Но вы не можете получить точное время на проверке на стороне сервера. Если страница не обновлена ​​или я не использую обновления. – Eric

+0

нет, проверьте клиентскую сторону, чтобы пользователь мгновенно обратил внимание на то, что что-то не так. затем проверьте серверную сторону, чтобы убедиться, что она не обходилась при возможной вредоносной попытке. – geowa4

0

Вы не должны использовать всплывающие окна javascript, чтобы предупредить пользователя о проблемах; они в лучшем случае неуклюжи.

Если вы не говорите пользователю о проблемах с страницами AJAXy, просто выполните проверку на стороне сервера, и ваше приложение будет выглядеть гладко. Я предполагаю, что если вы задаете этот конкретный вопрос, вы не делаете AJAX.

Что касается проверки сервера, не имеющей «точное время», вы имеете дело с часами и минутами, а не с миллисекундами.