3

我有一个包含格式日期的对象YYYY-MM-DD

我正在提取各种年、月和日整数,以便将它们发送到不同的API.

这是我的方法的一个例子,使用substr()

演示:http: //jsfiddle.net/AppSynergy/tELsw/

好的,它有效。不好了!- 它不 - 不完全.. 第三个元素有什么问题,4 月 8 日的“08”决定为 0?

如果我将“08”更改为另一个整数,例如“03”,就可以了。但是“08”会引起问题..

这个快把我逼疯了——怎么了?

如果你能发现它,你应该得到冰淇淋。

4

3 回答 3

7

08默认情况下被视为(无效)八进制文字。

您必须在对parseInt()的调用中明确指定基数,以便将此标记视为十进制(以 10 为底)数:

$("#debug").append(parseInt(date.substr(5, 2), 10) + " / ");
于 2012-06-25T09:37:48.630 回答
3

您需要parseInt与 radix/base of一起使用,10因为前面0将您的数字转换为八进制表示法。

parseInt(yourNum, 10);

由于这个原因,事实证明你应该在使用时总是指定基数,parseInt除非你不是在处理基数10

于 2012-06-25T09:36:47.920 回答
2

如果字符串以“0”开头,javascript 会认为基数是八(八进制)。

您需要告诉 javascript 以 10 为底来解析字符串。

$.each(testData, function(i, val) {
    // sort out the date format
    var date = val.trim();
    $('#debug').append(date+' ==><br />');
    $('#debug').append(parseInt(date.substr(0, 4), 10)+' / ');
    $('#debug').append(parseInt(date.substr(5, 2), 10)+' / ');
    $('#debug').append(parseInt(date.substr(8, 2), 10)+'<br /><br />');
});
于 2012-06-25T09:36:47.523 回答