JavaScript setFullYear()方法返回错误的日期

And*_*y F 5 javascript

今天早上我注意到了JavaScript setFullYear方法的一个特殊问题.

使用这样的方法时:

d.setFullYear(2012,2,8);
Run Code Online (Sandbox Code Playgroud)

返回正确的值:

Thu Mar 08 2012 10:30:04 GMT+0000 (GMT Standard Time)
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用parseInt方法返回整数,则返回的日期不正确:

d.setFullYear(parseInt("2012"), parseInt("02"), parseInt("08"));
Run Code Online (Sandbox Code Playgroud)

收益:

Wed Feb 29 2012 10:31:30 GMT+0000 (GMT Standard Time)
Run Code Online (Sandbox Code Playgroud)

看来parseInt方法返回的值不正确,但是当我测试它时:

document.write(parseInt("2"));

然后返回正确的值(2)

这里有一个工作小提琴:http://jsfiddle.net/rXByJ/

问题在于parseInt还是setFullYear?

PiT*_*ber 9

问题parseInt('08')0.这有效:

d.setFullYear(parseInt("2012"), parseInt("02"), 8);
Run Code Online (Sandbox Code Playgroud)

parseInt('08')和parseInt('09')都返回零,因为函数试图确定所用数值系统的正确基数.在Javascript中,以零开头的数字被认为是八进制,并且八进制中没有08或09,因此出现问题.

http://www.ventanazul.com/webzine/articles/issues-parseint-javascript

解决方案是使用第二个参数:

parseInt('08', 10) 
Run Code Online (Sandbox Code Playgroud)

要么

Number('08')
Run Code Online (Sandbox Code Playgroud)

另请参阅如何解决JavaScript的parseInt八进制行为?