这个javascript日期解析有什么问题?为什么 js 讨厌数字 8

What's wrong with this javascript date parsing? Why does js hate the number 8?

本文关键字:为什么 js 讨厌 数字 问题 什么 日期 javascript 这个      更新时间:2023-09-26

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

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

这是我的方法示例,使用 substr()

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

好的,它有效。哦不!- 它没有 - 不完全是..第 3 个元素有什么问题,4 月 8 日的"08"决定改为 0?

如果我将"08"更改为另一个整数,例如"03",那就没问题了。但是"08"会导致问题。

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

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

默认情况下

08被视为(无效的)八进制文字。

您必须在对 parseInt() 的调用中显式指定基数,以便将此令牌视为十进制(基数 10)数:

$("#debug").append(parseInt(date.substr(5, 2), 10) + " / ");
您需要将

parseInt与基数/基数一起使用10,因为前面的0以八进制表示法转换您的数字。

parseInt(yourNum, 10);

由于这个原因,事实证明,除非您不处理基数10,否则在使用parseInt时应始终指定基数。

如果字符串以"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 />');
});