如何在Chrome浏览器和Firefox浏览器中验证日期

4
在 Chrome 中,我正在尝试检查日期是否是有效的日期。
我有一个变量:
var d = new Date('9/'); // Not a correct format

在谷歌浏览器中

console.log(new Date('9/')); // Output: Sat Sep 01 2001 00:00:00 GMT+0530 (India Standard Time) Which is wrong as I am providing wrong date.

在Firefox里面
console.log(new Date('9/')); // Output: Invalid Date

同时在火狐浏览器中使用 date.toLocaleString() 的输出为 06 May 2007 00:00:00,而在谷歌浏览器中则是1/9/2001

因此我的问题是如何在谷歌浏览器中验证日期并保持代码免受这些差异的影响。如果需要更多细节,请在评论中写明。


4
请使用 http://momentjs.com 网站。 - Matt Ball
2
@MattBall 这个或类似的应该是答案。站在前人的肩膀上...他们可能做得更好。 - rockerest
@MattBall 我做不到这个,我需要JavaScript解决方案。页面已经有很多框架了。 - Ashwani
一个JavaScript库仍然是JavaScript。 “太多库”不是引入另一个库的充分理由(如果是正确的原因)。 如果想要在不同的浏览器之间表现相同,当不同的浏览器有所不同时,使用一个库 - Matt Ball
一些正则表达式的解决方案?@MattBall - Ashwani
不要重复造轮子。这个压缩库不到7kb。直接使用它就好了。 - Matt Ball
2个回答

5

Javascript的Date API在不同浏览器间存在一些差异,正如你已经发现的那样。

我建议最好的方法是使用其中一个可用的第三方库。这里我可以推荐两个——Moment.jsDate.js

这两个库都具有更好的验证和解析功能,并且比内置的Date类在跨浏览器时更加一致。


不使用库,原生JavaScript是否无法实现?我知道这些解决方案,但我需要仅使用JavaScript的解决方案。无论如何,谢谢!@Spudley - Ashwani
嘿@Ashwin,我已经广泛使用了moment.js,并且我可以向你保证它是纯Javascript。该项目托管在Github,所以你可以自己检查唯一必需的文件只是Javascript。 - rockerest
这些库是JavaScript,因此这是一个仅限JavaScript的解决方案。问题在于不同浏览器之间的Date类不一致,因此您需要其他东西来进行解析和验证。您可以选择编写自己的验证代码或使用现有库。但即使您编写自己的代码,它仍然是一个库;只是您自己编写的而已。如果您愿意,可以自己编写,但我提到的那些库已经存在了,它们是免费的,它们已经经过适当的测试,它们是众所周知的,并且工作得很好。由您选择。 - Spudley
@Spudley 您说得对,我不能再信任 Date API 了。使用库比编写自己的库更好。尽管我几乎已经编写了一个验证“日期”的库 :) 。+1 已接受 - Ashwani

1

正确的答案是使用Javascript库,正如@Spudley建议的moment.js

但是,如果您不想包含那个很棒的库(或类似的库),您可以尝试使用以下正则表达式来处理日期:

var date = "9/",
    pattern = /(?:(?:\d{2}[-\/]){2}\d{4})|(?:\d{4}(?:[-\/]\d{2}){2})/,
    isValid = false;

isValid = pattern.test( date );

这将匹配yyyy/mm/dd,dd/mm/yyyy,mm/dd/yyyy和yyyy/dd/mm(以及许多变化[和问题])。但是,这种方式非常天真,无法匹配绝大部分日期格式,允许使用混合分隔符和各种其他问题。再次强烈建议您实现像moment.js这样的库,但是这个正则表达式可能是一个开始。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接