2012-09-19 55 views
2

我需要提取JSON日期:我saw那我可以做到這一點javascript的substr奇怪的行爲?

/Date(1224043200000)/ 

var date = new Date(parseInt('/Date(1224043200000)/'.substr(6))); 
            ^
            | 
------------------------------

但如何substr知道忽略最後的字符? [] /]

我在mdn搜索,但找不到記錄的行爲。

+1

這不是'substr'一個跳過最後一個非數字字符,它是'parseInt函數'。爲了節省成本,我寧願將'length'參數放在'substr'中。 – Yoshi

+1

哦,你好吧。 –

+2

旁註:爲了防止奇怪的行爲,總是使用'parseInt()'和radix參數! – Sirko

回答

4

.substr()返回第6個字符後的所有內容。

parseInt()將分析所有的數字字符,直到它到達一個非數字字符,所以無視parseInt


Quoting the docs

發生,如果parseInt遇到一個角色,是不是在一個數字指定的基數,它會忽略它和所有後續字符,並返回解析到該點的整數值。 parseInt將數字截斷爲整數值。前後空格是允許的。

2

試試這個:

var date = new Date(parseInt('/Date(1224043200000)/'. substring(6, indexOf(")")-1)); 
+1

我的朋友,我想你沒有得到我的觀點:-) –

2

我會去了解這個法子。 Gaby解釋了關於parseInt的問題,但需要注意的是:parseInt將具有前導零的整數解釋爲八進制。這可能不是你的情況適用,但海事組織,這是一個更安全的方法:

var date = new Date(+('/Date(1224043200000)/'.match(/\d+/)[0])); 

首先,'/Date(1224043200000)/'.match(/\d+/)從字符串中提取數字,在數組:["1224043200000"]
然後我們需要這些匹配的第一個元素,因此需要[0]
爲了安全起見,我將所有這些括在括號中,前面加上+符號,以便將匹配的子串強制轉換爲數字:+('/Date(1224043200000)/'.match(/\d+/)[0]) === 1224043200000
這將傳遞給Date構造函數,該構造函數創建一個包含"Wed Oct 15 2008 06:00:00 GMT+0200 (Romance Daylight Time)"的日期對象作爲字符串值

捕捉任何可能出現的錯誤,你可能要有點分裂這一個班輪起來,但是這取決於你:)