2012-02-16 115 views
0

这是asp.net验证控件的客户端脚本函数。在javascript中验证日期

<script type="text/javascript"> 
    function validateDateControl(sender, args) { 

     var d = new Date(args.Value); 

     args.IsValid = (Object.prototype.toString.call(d) === "[object Date]"); 

     if (!args.IsValid) { 
      sender.innerText = "Client: Invalid date"; 
     }  

     return args.IsValid; 
    } 
</script> 

Immediate Window Results: 
d 
NaN 
Object.prototype.toString.call(d) === "[object Date]" 
true 

为什么比较评估真实的吗?

+0

我不能低估你的问题。请发布更多详细信息。对不起:) – AngeloBad 2012-02-16 15:18:05

+3

无效的日期仍然是一个日期对象,它只是无法正确表示。 – 2012-02-16 15:18:52

回答

8

因为new Date('as;dlas;ld,as;dl,as')仍然是Date对象。

> var d = new Date('as;dlas;ld,as;dl,as') 
    undefined 
> d.toString() 
    "Invalid Date" 
> Object.prototype.toString.call(d) 
    "[object Date]" 

一种更好的方式来检查日期的有效性是看Date.getTime()不返回NaN

function validateDateControl(sender, args) { 

    var d = new Date(args.Value); 

    args.IsValid = !isNaN(d.getTime()); 

    if (!args.IsValid) { 
     sender.innerText = "Client: Invalid date"; 
    }  

    return args.IsValid; 
} 
0

因为它是Date类型的对象,但值(什么是的字符串表示所示对象本身,而不是类型)是无效的。