如果您问为什么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方式是传递Date信息的首选方式,当年份不是第一个时,系统会尝试智能猜测。由于世界上有些地方有,有些地方有,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