JavaScriptで「HH:MM:SS」形式の時刻文字列を秒数に変換する方法
はじめに
本記事では、「HH:MM:SS」形式の時刻文字列を受け取り、その合計秒数を返すJavaScript関数の作成方法を解説します。
具体的には、以下のような動作を目指します。
countSeconds('12:00:00') // 43200
countSeconds('00:30:10') // 1810それでは、実際のコードを見ていきましょう。
実装の考え方
変換の手順はシンプルで、以下の3ステップで構成されます。
- 時刻文字列を split(':') メソッドで「時・分・秒」に分割する
- 分割された文字列を parseInt() で数値に変換する
- 「時 × 3600 + 分 × 60 + 秒」という計算式で合計秒数を求める
コード例
const timeString = '23:54:43';
const other = '12:30:00';
const withoutSeconds = '10:30'; // 秒が省略されたパターン
const countSeconds = (str) => {
// 分割時にデフォルト値 '0' を設定し、要素の欠落に対応
const [hh = '0', mm = '0', ss = '0'] = (str || '0:0:0').split(':');
const hour = parseInt(hh, 10) || 0;
const minute = parseInt(mm, 10) || 0;
const second = parseInt(ss, 10) || 0;
return (hour * 3600) + (minute * 60) + second;
};
console.log(countSeconds(timeString));
console.log(countSeconds(other));
console.log(countSeconds(withoutSeconds));実行結果
コンソールへの出力は以下のようになります。
86083 45000 37800
コードのポイント解説
1. デフォルト値付きの分割代入
const [hh = '0', mm = '0', ss = '0'] のように配列の分割代入にデフォルト値を指定することで、「10:30」のように秒が省略された文字列や、空の入力にも安全に対応できます。また、(str || '0:0:0') によって、引数が undefined や null の場合もエラーを防いでいます。
2. parseInt の第2引数(基数)の指定
parseInt(hh, 10) のように基数として 10 を明示的に指定することは重要です。これにより、先頭が「0」の文字列(例:「09」)が意図せず8進数として解釈されるリスクを回避でき、常に10進数として正しく変換されます。
3. || 0 によるフォールバック
変換結果が NaN になる可能性がある場合に備え、|| 0 を付けることで、不正な値が混入しても計算全体が NaN にならないように防御しています。
まとめ
文字列の分割と数値変換を組み合わせるだけで、「HH:MM:SS」形式の時刻を秒数へ簡単に変換できます。紹介したコードは、秒の省略や入力値の欠落といったエッジケースにも対応しており、そのまま実務でも利用できる汎用的な関数となっています。
-
JavaScriptで文字列を分割して配列からオブジェクトへ変換する方法
ここでは、「キー-値」の形式を持つ文字列の配列を扱います。各要素にはハイフン(-)が含まれており、その左側がキー、右側が値になっています。この配列内の文字列をすべて分割し、1つのオブジェクトとしてまとめるのが今回の目標です。まず、サンプルとなる配列を見てみましょう。const arr = [name-Rakesh, age-23, city-New Delhi, jobType-remote, language-English];それでは実際にコードを書いていきます。考え方はシンプルで、forEach()で配列をループ処理しながら、各文字列をsplit(-)で分割し、得られたキーと値を新しいオ
-
Pythonで秒数を「時:分:秒」形式に変換する方法
関数が秒単位の情報を返す場合でも、実際には「時:分:秒」形式で表示したいというケースはよくあります。そんなときに便利なのが divmod() 関数です。この関数は1回の除算で商と余りの両方を同時に求めることができるため、わずか2回の数学的操作だけで素早く結果を得られます。divmod()を使った変換例seconds = 56741 m, s = divmod(seconds, 60) h, m = divmod(m, 60) print(%d:%02d:%02d % (h, m, s))出力結果上記のコードを実行すると、次のような出力が得られます。15:45:41%02d は分と秒を必ず2桁で