验证日期是否为avalid日期

时间:2016-05-24 07:38:03

标签: javascript validation date datetime

我正在尝试跨平台和浏览器进行验证,无论日期是否为有效日期。

我尝试了以下内容,并且它在浏览器(IE5 +,Firefox,Chrome)中始终如一地工作:

isNaN(new Date())
--> false

isNaN(new Date(0))
--> false

isNaN(new Date("Fri May 20 2016 12:58:52 GMT+0530"))
--> false

isNaN(new Date("asd"))
--> true

前3个是有效日期,如果输出为假,则表示日期有效。

请确认这是否正确。

PS:这个问题与日期格式无关。这个问题是关于确定日期是否是有效的Javascript Date对象。例如,在new Date("asd")上面的试用版显然不是日期。

2 个答案:

答案 0 :(得分:0)

在您的代码中:

isNaN(new Date())
--> false

此处, new Date()会创建一个有效的新日期。 isNaN 然后在新创建的 Date 上调用 ToNumber ,这将返回其时间值,该值不是NaN,因此返回值为

isNaN(new Date(0))
--> false

这会创建一个时间值为0的有效日期(相当于1970-01-01T00:00:00Z),这不是NaN所以返回false。

isNaN(new Date("Fri May 20 2016 12:58:52 GMT+0530"))
--> false

这可能会也可能不会创建有效的Date对象,因为这取决于解析器的实现依赖行为来创建有效日期(或不是)。因此,无论它返回true还是false都是有问题的。

isNaN(new Date("asd"))
--> true

如上所述,获得预期结果取决于依赖于实现的解析器创建无效日期(尽管解析器很可能会创建无效日期)。

Beyound测试,您可以随时阅读规范。它声明无效的Date对象的时间值为NaN。因此,确定它是否为有效日期的可靠方法是检查时间值或任何 get 方法返回的值( getYear getMonth 等。)。

以下任何一项都可以:



var d0 = new Date(NaN)  // Create an invalid date.
var d1 = new Date(2016) // Create a valid date

// Tests for invalid date
// Let isNaN coerce the date to Number
console.log(isNaN(d0) + ' : ' + isNaN(d1))
// Test the time value explicitly
console.log(isNaN(d0.getTime()) + ' : ' + isNaN(d1.getTime()));
// Use unary + to coerce the Date to Number
console.log(isNaN(+d0) + ' : ' + isNaN(+d1));
// Use a get method
console.log(isNaN(d0.getDate()) + ' : ' + isNaN(d1.getDate()));

// Not using isNaN - test the value returned by *toString*
console.log((d0.toString() == 'Invalid Date') + ' : ' + (d1.toString() == 'Invalid Date'));




最后一种方法并不可靠,因为 Date.prototype.toString 可以被覆盖并返回其他一些值(不是一个好主意或可能,但可能)。

答案 1 :(得分:-2)

Javascript是进行跨浏览器日期验证的好方法。如果您能以正常的dd / mm / yyyy格式获取日期,这里有一个很好的正则表达式验证示例来检查日期字符串是否有效: -

    var theDate = '31/12/2016'
    var reg = /(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d/;
    return theDate.match(reg);

希望这有帮助!