2012-08-17 48 views
2

日期驗證日期驗證在傳統的ASP在傳統的ASP

我在驗證日期

dim Day,Month,Year,FullDate 
Day = "01" 
Month = "20" 
Year = "2012" 
FullDate = Month + "/" + Day + "/" + Year 

document.write FullDate 
document.write IsDate(FullDate) 
document.write IsDate(CDate(FullDate)) 
document.write IsDate(20/01/2012) 

輸出是在傳統的ASP和有新的問題:

20/01/2012 
true true false 
+2

這是一個錯字,您沒有引號中的最後日期嗎? – mellamokb 2012-08-17 17:43:52

+0

這裏沒有錯字,則IsDate(MM/DD/YYYY)我的問題是,爲什麼有響應爲TRUE – 2012-08-17 17:46:56

回答

1

如果你問爲什麼document.write IsDate(20/01/2012)不寫true原因是因爲你已經要求計算機做分工,然後評估它作爲日期。

20/01 = 20 => 20/2012 ~= 0.01

IsDate(0.01) => false

如果你真的想測試你有什麼試試這個代替(小調整)

Your: document.write IsDate(20/01/2012) 
Mine: document.write IsDate("20/01/2012") 

而且,只是爲了澄清http://en.wikipedia.org/wiki/Date_format_by_country

有些數里斯使用

dd/mm/yyyy 

有的地方使用

mm/dd/yyyy 

,這就是爲什麼國際標準化組織建議你做的事情有至少特異性最專一:

yyyy-mm-dd hh:mm:ss.ffffffffffff 

注意的歲月 - >幾個月(哪一個月比哪一年更具體) - >天(事件發生的那一天是有用的) - >小時(不要遲到!) - >分鐘(由鍾保存) - >秒(現在你有一些想法什麼時候發生) - >小數秒(奧林匹克游泳!!)

年是非特定的。很多事情發生在一年之內。所以這些應該總是先解析。 ISO方式是傳遞日期信息的首選方式,並且當年不首先時,系統會嘗試智能地進行猜測。由於世界上有些地方做的是dmy,有些做的是mdy,而且由於您的起始兩個數字中只有一個超過了12,所以它假定您的意思是dmy而不是mdy。這裏沒有WTF。


爲了記錄在案,這裏是國家的列表,它主要是把每月第一個作爲傳統的問題在mdy格式(不包括ISO格式這不是傳統,而是科學)

  • 伯利茲
  • 密克羅尼西亞聯邦
  • 帕勞
  • 美利堅合衆國

最後,如果你想編寫一個函數,將嘗試重新分析爲您的日期:

考慮,人們往往會打破用空格,句號,連字符或斜線的日期,他們可能把它寫成「20120817」,或者也可以包括時間。有可能是在中間有一個T,並且它可以具有在端部爲Z。

採樣輸入:(和他們所代表的日期)

2011-08-17 (august 17th) 
2011-08-01 (august 1st or jan 8th?) 
08-01-2011 (august 1st or jan 8th?) 
08-17-2011 (august 17th) 
17-08-2011 (august 17th) 
2011-17-08 (I've never seen this ever) 

2011/08/17 (august 17th) 
2011.08.01 (august 1st or jan 8th?) 
08\01\2011 (august 1st or jan 8th?) 
08-17-2011 (august 17th) 
17 08 2011 (august 17th) 

正如你所看到的,是一個已經在這裏發生解析公平一點,那就是假設他們有一個10位的字符串,那10位數是日期。這裏有一些其他的日期格式:

08-01-12 (was that January 8th, 2012 or January 12th, 2008 or August 1st, 2012 ...) 
15-03-13 (ok, so we have found the month is March, but the other two?) 
1-1-1 
8-8-8  (these two are easy, but which rule do they match?) 

然後你不得不解析

20120817 
20121708 
20120801 
01082012 
08172012 

因此,大家可以看到,解析函數似乎容易,但還有很多東西需要考慮,這是隻是日期。想讓我們來談談下一次?

201208171311 -> 2012-08-17 13:11 (1:11 PM) 
20120817T1311 -> 2012-08-17 13:11 (1:11 PM) 
20120817T0111P -> 2012-08-17 01:11 PM 
+0

FullDate = 20/01/2012,這裏一個月的20是不正確的,響應應該是假的 – 2012-08-17 17:48:13

+0

@VijayShah看看是否對你更有意義。 – jcolebrand 2012-08-17 17:54:28

+0

要添加到@jcolebrand所說的內容,以下是一個鏈接,其中包含一個可用於標準化日期格式的函數http://p2p.wrox.com/classic-asp-professional/41451-isdate-validation-problem.html #post165295 – jwatts1980 2012-08-17 17:56:00