Asp classic IsDate验证错误的格式

Asp classic IsDate验证错误的格式,asp-classic,Asp Classic,我有这些台词 SetLocale(3081) Response.Write "<p>TEST: " & Date() & " | " & isDate("3/22/2014") & " --> " & GetLocale() & "</p>" SetLocale(3081) 回答。写“测试:&Date()&”&isDate(“2014年3月22日”)&-->“&GetLocale()&”” 哪个输出 测试:2014

我有这些台词

SetLocale(3081)
Response.Write "<p>TEST: " & Date() & " | " & isDate("3/22/2014") & " --> " & GetLocale() & "</p>"
SetLocale(3081)
回答。写“测试:&Date()&”&isDate(“2014年3月22日”)&-->“&GetLocale()&”

哪个输出

测试:2014年7月3日|真实-->3081

现在,如果我错了,请纠正我,但是一年中不是只有12个月吗?根据
IsDate
,我通过的日期应该是错误的,因为我输入了22作为月份,尽管本地设置另有说明,但仍然有效

我想验证日期是否为插入数据库的正确格式,如果没有给出更友好的错误,“2014年3月22日”将输出“将数据类型varchar转换为日期时出错”。当我尝试将其插入数据库时,因为它通过IsDate检查


我做错了什么?

是的,这确实是一个有效日期

为什么??因为VBScript足够聪明/慷慨/愚蠢(选择您的最爱),可以将数字视为日期。“2014年3月22日”可以解析为公式:2014年3月22日=6.7707863313983931E-5

现在,将此数字转换为日期:

Dim myNumber, myDate
myNumber = 6.770786313983931e-5
myDate = CDate(myNumber)
变量
myDate
将是完全有效的日期,即1899年12月30日00:00:06


所以底线是:这个值是一个日期,而不是你所期望的。您没有做错什么,但要真正检查字符串是否为有效日期,您必须亲自检查,没有现成的方法。

您可以尝试使用
Session.LCID=3081
而不是
setLocale
?@SearchAndResQ这样做,没有区别,
GetLocale()
/
Session.LCID
返回我使用
Session.LCID
/
SetLocale(#))
设置的内容,因此
响应.write
确认区域设置,格式
Date()
如下所示(检查您是否可以使用此线程中的任何内容)@SearchAndResQ:假设任何VB命令的脚本版本与等效的VB6、VBA或VB.NET命令相同时,您必须非常小心-基本上大多数命令都不是。作为日期的故障保护,我始终使用
dd mmm yyy hh:mm:ss
格式(如有必要,显然不包括时间)。