JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで「HH:MM:SS」形式の時刻文字列を秒数に変換する方法

はじめに

本記事では、「HH:MM:SS」形式の時刻文字列を受け取り、その合計秒数を返すJavaScript関数の作成方法を解説します。

具体的には、以下のような動作を目指します。

countSeconds('12:00:00') // 43200
countSeconds('00:30:10') // 1810

それでは、実際のコードを見ていきましょう。

実装の考え方

変換の手順はシンプルで、以下の3ステップで構成されます。

  1. 時刻文字列を split(':') メソッドで「時・分・秒」に分割する
  2. 分割された文字列を parseInt() で数値に変換する
  3. 「時 × 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」形式の時刻を秒数へ簡単に変換できます。紹介したコードは、秒の省略や入力値の欠落といったエッジケースにも対応しており、そのまま実務でも利用できる汎用的な関数となっています。

  1. JavaScriptで文字列を分割して配列からオブジェクトへ変換する方法

    ここでは、「キー-値」の形式を持つ文字列の配列を扱います。各要素にはハイフン(-)が含まれており、その左側がキー、右側が値になっています。この配列内の文字列をすべて分割し、1つのオブジェクトとしてまとめるのが今回の目標です。まず、サンプルとなる配列を見てみましょう。const arr = [name-Rakesh, age-23, city-New Delhi, jobType-remote, language-English];それでは実際にコードを書いていきます。考え方はシンプルで、forEach()で配列をループ処理しながら、各文字列をsplit(-)で分割し、得られたキーと値を新しいオ

  2. 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桁で