parseIntで文字列を数値に変換する時の注意

またまた慣れないJavaScriptでハマったのでメモ。

やりたいコトは、"12:34:56"のような時刻を表す文字列を、00:00:00からの通算秒(この場合は45296秒)に変換するという処理。

正規表現を使って

var str = "12:34:56" ;
var m = str.match( /(\d{2}):(\d{2}):(\d{2})/ ) ;
if ( m ) {
  var sec = parseInt( m[1] ) * 60 * 60 + parseInt( m[2] ) * 60 + parseInt( m[3] ) ;
}

みたいに作ったら、"08:20:00"とかの結果がおかしくなった。

調べたところ、parseInt()が文字列を8進数と勘違いしているのが原因みたい。

var sec = parseInt( m[1], 10 ) * 60 * 60 + parseInt( m[2], 10 ) * 60 + parseInt( m[3], 10 ) ;

のように、第2引数を使って10進数であることを明示的に教えてあげれば、期待する結果が得られた。