« aタグのリンク先から特定の拡張子を探すbookmarklet | メイン | gihyo.jp Jaxer の連載第5回公開 »

JavaScriptのparseInt関数の挙動

YYYYMMで日付を表現する文字列からDateオブジェクトを生成しようとして、

var yyyymm = '200808';
var date = new Date(yyyymm.substr(0,4),parseInt(yyyymm.substr(4,6)) -1);

とやってみたら、mmのところが08と09のときだけうまくいかなかった。

よくよく調べてみると、頭に0がついた文字列をparseIntするときは基数が8として計算されるみたい。

つまり、

parseInt('01'); // 1
parseInt('02'); // 2
parseInt('03'); // 3
parseInt('04'); // 4
parseInt('05'); // 5
parseInt('06'); // 6
parseInt('07'); // 7
parseInt('08'); // 0
parseInt('09'); // 0
parseInt('10'); // 10
parseInt('11'); // 11
parseInt('12'); // 12

こんな感じになります。

'08'を8にしたいときは、第2引数に基数の10を指定すればOK。

parseInt('08',10); // 8
parseInt('09',10); // 9

基本的なところなんだろうけど、ついはまちゃいました。