日期验证在传统的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
如果你问为什么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
FullDate = 20/01/2012,这里一个月的20是不正确的,响应应该是假的 – 2012-08-17 17:48:13
@VijayShah看看是否对你更有意义。 – jcolebrand 2012-08-17 17:54:28
要添加到@jcolebrand所说的内容,以下是一个链接,其中包含一个可用于标准化日期格式的函数http://p2p.wrox.com/classic-asp-professional/41451-isdate-validation-problem.html #post165295 – jwatts1980 2012-08-17 17:56:00
这是一个错字,您没有引号中的最后日期吗? – mellamokb 2012-08-17 17:43:52
这里没有错字,则IsDate(MM/DD/YYYY)我的问题是,为什么有响应为TRUE – 2012-08-17 17:46:56