2014-07-03 39 views
0

我有這些線則IsDate驗證格式錯誤

SetLocale(3081) 
Response.Write "<p>TEST: " & Date() & " | " & isDate("3/22/2014") & " --> " & GetLocale() & "</p>" 

其輸出

TEST:2014年3月7日|真 - > 3081

現在糾正我,如果我錯了,但不存在只有12個月,一年,根據IsDate我已經通過的日期,這應該是錯誤的,因爲我?已將22作爲月份,儘管當地情況說明不正確。

我想驗證日期是插入數據庫的正確格式,如果沒有給出更友好的錯誤,「3/22/2014」將輸出「錯誤轉換數據類型varchar到日期。 「當我嘗試將它錄入數據庫,因爲它是通過IsDate檢查得到的

我在這裏做了什麼錯?

+0

你可以嘗試使用'Session.LCID = 3081'而不是'setLocale'嗎? – SearchAndResQ

+0

@SearchAndResQ做到了這一點,沒有區別,'GetLocale()'/'Session.LCID'返回我使用'Session.LCID' /'SetLocale(#)'設置的任何東西,所以'response.write'確認了語言環境設置,格式'Date()'出現爲 –

+0

(http://stackoverflow.com/questions/4338025/isdate-function-returns-unexpected-results)[請檢查您是否可以使用此線程中的任何內容] – SearchAndResQ

回答

2

是的,這確實是一個有效的日期。

爲什麼?因爲VBScript是智能/慷慨/愚蠢的(選擇你最喜歡的)足以將數字視爲日期。和 「2014年3月22日」 可以被解析爲式:4 /2014分之22= 6.770786313983931e-5

現在藉此數並轉換爲日期:

Dim myNumber, myDate 
myNumber = 6.770786313983931e-5 
myDate = CDate(myNumber) 

可變myDate將是完美有效日期,即12月30日 1899,00:00,06

所以底線:值是一個日期,只是不是你所期望的。你沒有做錯任何事情,但要真正檢查一個字符串是否有效,你必須自己檢查一下,沒有開箱即用的方法。