1. 程式人生 > >js判斷物件是否屬於Date型別並進行轉換

js判斷物件是否屬於Date型別並進行轉換

    需求說明:前後臺互動時,將後臺的List集合封裝為json傳回前端js。而集合中的實體有欄位型別為java.util.Date型別。那麼後臺返回的json物件到前臺後
,此值會為Object,如果直接解析到此值alert出來(或者是顯示在頁面上),會是顯示[object Object].我需要遍歷json中的所有值,判斷後臺程式返回的json字串中有值為Date型別
的話,將該值顯示為"2013-09-06"這種形式。
    解決:1.遍歷json的所有值,判斷該值是否是Date型別:簡單地 if (value instanceof Date) 或者 if (value instanceof Object) 或者if (value instanceof object)(因為
alert(value.typeof)打出來是object)都不能正確判斷。而是if (Object.prototype.toString.call(value) == "[object Object]")能夠正確判斷出來。因為Date型別屬於js中比較
特殊的型別,其他特殊的型別還有"Array","RegExp","Number","String","Object","HTMLDocument"等,都可以這樣判斷出來。
 注:這裡的"特殊"是指什麼呢? 
首先 "Array","RegExp","Date","HTMLDocument"這幾個型別的物件的 typeof 結果都是"object" 
當然 更主要的是  Array RegExp Date ... 這幾個類 是和 window物件繫結的. 
所以不能簡單的通過 typeof   instanceof 和 constructor  來做判斷. 
因為 
obj instanceof Array 成立的前提是 obj 和Array  要屬於一個window 
obj .constructor == Array 成立的條件也是一樣 
RegExp Date ... 類似. 
          2.要將該值轉換為字串顯示格式(如"2013-09-06"),單純地將js中Date型別轉為字串,直接用date.getYear() + (date.getMonth()+1) + date.getDay()即可,
但是,這裡的問題是,從json解析出來的Date型別值現在是[object Object],使用value.getYear()等方法都無效。需要先將該值轉為js的Date型別,簡單地用Date(value)不行,

需要new Date(Date(value))這樣才能正確地轉為Date型別,然後便可以使用getYear()等方法轉為字串。

非常不幸的是:後邊發現,new Date(Date(value))這樣始終獲取的是當前時間。。。。。。沒有找到解決辦法。。



參考資料:http://fins.iteye.com/blog/315901