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進数であることを明示的に教えてあげれば、期待する結果が得られた。