2012-08-17 39 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