2012-02-16 117 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類型的對象,但值(什麼是的字符串表示所示對象本身,而不是類型)是無效的。