4

在 chrome 中,我试图检查日期是否有效。

在有一个变量:

var d = new Date('9/'); // Not a correct format

在 Chrome 中

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.

在火狐中

console.log(new Date('9/')); // Output: Invalid Date

在 Firefox 中也使用date.toLocaleString()has 输出06 May 2007 00:00:00

在 chrome 中它是1/9/2001

所以我的问题是如何在 chrome 中验证日期并确保代码免受这些差异的影响。如果需要有关它的更多详细信息,请在评论中写下。

4

2 回答 2

5

正如您所发现的,Javascript Date API 在浏览器之间可能会产生一些混合的结果。

我可以建议的最佳选择是使用可用于此的第三方库之一。我可以推荐两个—— Moment.jsDate.js

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

于 2013-09-20T13:59:07.860 回答
1

正确的答案是使用 @Spudley 建议的 Javascript 库,例如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/yyyyyyyy/dd/mm(加上一些变体 [和问题])。

然而,这是非常幼稚的,与绝大多数日期格式不匹配,允许混合分隔符,以及许多其他问题。

同样,我强烈建议您实现一个类似moment.js的库,但这个正则表达式可能是一个开始。

于 2013-09-20T14:23:06.653 回答