2

我需要从 json 中提取日期:

/Date(1224043200000)/ 

看到我可以这样做:

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

但是如何substr知道忽略最后一个字符?[)/]

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

4

3 回答 3

4

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

但是parseInt()会解析所有数字字符,直到它到达一个非数字字符,所以忽略发生在parseInt


引用文档

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

于 2012-09-19T07:47:11.117 回答
2

试试这个:

var date = new Date(parseInt('/Date(1224043200000)/'. substring(6, indexOf(")")-1 )); 
于 2012-09-19T07:49:39.947 回答
2

我会以另一种方式解决这个问题。Gaby 解释了 parseInt,但要注意:parseInt将带前导零的整数解释为八进制。这可能不适用于您的情况,但 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)"作为字符串值

要捕获任何可能的错误,您可能希望将这条单线拆分一下,但这取决于您 :)

于 2012-09-19T07:59:53.443 回答