2015-06-21 12 views
-1

我有一个日期,我将转换为LocaleDateString,然后将其拆分成一个数组在Angulrajs控制器内。当我尝试将数组中的元素转换为int时,我得到了NaN。数组中的字符是数字,但解析不起作用。parseInt不处理从Angularjs控制器中的吐出日期创建的数组的数据

如何正确解析数据?

代码:

var dateLocal = $scope.startDate.toLocaleDateString(); //Has this ‎6‎/‎5‎/‎2015 
var dateSplitted = dateLocal.split("/"); //Has [6,5,2015] 
var month = parseInt(dateSplitted[0]); //HERE If I use parseIntI get NaN originally it has 6 
var day = dateSplitted[1];//Has 5 
var year = dateSplitted[2]; Has 2015 

我想APLE转换为字符串,月,日和年。

+1

它的正常工作 –

+0

记得使用基数中parseInt函数例如:parseInt函数(VAL,10) – mfreitas

+0

@Devsined是你看到在IE11这个问题呢?你是否在其他浏览器中看到过它? – tavnab

回答

4

你依靠toLocaleDateString,这是实现相关:

此函数返回一个字符串值。字符串的内容是 实现相关的

的问题是,您的浏览器返回一些left-to-right marks (U+200E)的字符串。

看到区别:

var str1 = "6", // "\u0036"    <-- OK 
    str2 = "‎6‎"; // "\u200e\u0036\u200e" <-- Your "corrupted" string 
parseInt(str1); // 6 
parseInt(str2); // NaN 

所以,你不应该相信由该方法返回的值。相反,使用日期方法来获取日,月和年。

+1

如果找到的第一个字符不是数字,parseInt将返回NaN。所以你必须用正则表达式修剪非数字。 –

+0

@Oriol你怎么知道这是从左到右的标记? – tavnab

+0

@tavnab OP说:“*有此6/5/2015 *”。这个字符串包含那些U + 200E。 – Oriol

0

我试过你的代码,它似乎对我来说工作得很好。对于您的dateLocal,我刚刚用var dateLocal = new Date().toLocaleDateString();替换了您的值,因为我不知道从范围加载了什么值。当我这样做时,代码加载得很好,所以你可能想仔细检查你从范围加载的变量的性质。

1

这不回答为什么你在你的代码获得NaN,但不是日期对象转换为字符串,并解析部分,你可以直接使用Date.prototype.getMonth()Date.prototype.getDate()(天的获取日期的部分 - 月)和Date.prototype.getFullYear()

+0

这个oslution的问题是我得到的时区的偏移量,后来我无法与其他日期进行比较 – Devsined

+1

道歉,不清楚为什么使用这些函数将不能用你的例子。在'$ scope.startDate'上调用上述函数的结果等价于获取字符串并解析它,但更短。如果您还需要提取时区,可以使用['Date.prototype.getTimezoneOffset()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/使用getTimezoneOffset)。你能澄清一下,如果我误解你的用例吗? – tavnab