经典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)
输出:
20/01/2012
true true false
答案 0 :(得分: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
正如您所看到的,解析函数似乎很容易,但需要考虑很多,这就是JUST日期。想让我们谈谈下一次的时间吗?
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