2009-10-29 51 views
0

我有一個自定義驗證程序,指向客戶端腳本來驗證文本框。在JavaScript中比較date

我的日期和時間被分成兩個文本框 - 一個帶有日期以mm/dd/yyyy格式和其他與時間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

我覺得我已經說了這一百萬次。確保您驗證服務器端,因爲可以規避任何客戶端驗證。我曾經以這種方式繞過了Twitter的140個字符限制。 – geowa4 2009-10-29 15:27:27

回答

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"); 

編輯:我似乎無法得到,當我用「AM/PM」它的工作,所以纔將其轉換爲24個時,它會沒事的。

+0

這工作。但看看我在編輯上面做了什麼。 – Eric 2009-10-29 16:04:47

0

不要浪費時間在客戶端驗證這一點。它永遠不會是可靠的,無論如何你將不得不在服務器端進行驗證。

+2

不是真的,它不是浪費時間,但他應該同時做 – TStamper 2009-10-29 15:28:45

+0

但是你無法獲得服務器端驗證的確切時間。除非頁面被刷新,否則我使用updatepanels。 – Eric 2009-10-29 15:29:00

+0

否,驗證客戶端,以便用戶立即獲得反饋,指出有問題。然後驗證服務器端以確保它在可能的惡意嘗試中未被規避。 – geowa4 2009-10-29 15:29:05

0

您不應該使用JavaScript彈出窗口來提醒用戶存在問題;他們充其量是笨重的。

除非你告訴用戶有一個與AJAXy頁面的問題,只是做服務器端驗證,你的應用將是滑頭期待。我假設你是否在問這個問題,你不是在做AJAX。

至於沒有「確切的時間」服務器端驗證,你處理小時和分鐘,不毫秒。