javascript substr奇怪的行为?

时间:2012-09-19 07:43:52

标签: javascript

我需要从json中提取日期:

/Date(1224043200000)/ 

saw我能做到:

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

substr如何知道忽略最后的字符? [)/]

我在mdn搜索过,但找不到记录在案的行为。

3 个答案:

答案 0 :(得分:4)

.substr()返回第6个字符后的所有内容。

但是parseInt()将解析所有数字字符,直到它到达非数字字符,因此忽略发生在parseInt


Quoting the docs

  

如果parseInt遇到的字符不是指定基数中的数字,它会忽略它和所有后续字符,并返回解析到该点的整数值。 parseInt将数字截断为整数值。允许前导和尾随空格。

答案 1 :(得分:2)

试试这个:

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

答案 2 :(得分:2)

我会采取另一种方式。 Gaby解释了parseInt,但请注意:parseInt将带有前导零的整数解释为octals。这可能不适用于您的情况,但IMO,这是一种更安全的方法:

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)"为字符串值

为了捕捉任何可能的错误,你可能想要将这个单行分开一点,但这取决于你:)

相关问题