1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TypeScriptAdvent Calendar 2024

Day 3

【TypeScript】文字列形式で表現された時間を秒数に変換

Posted at

はじめに

TypeScript で文字列形式で表現された時間(例えば "00:05:30""30")を、秒数に変換する関数 convertToSeconds を実装しました。

以下で、各部分を詳しく説明します。

実装

export const convertToSeconds = function( durationTime:string ){ // 00:05:30 => 330
    const timeArray = durationTime.split(':');
    if(timeArray[3]) return 0;

    if(timeArray[1] && timeArray[2]){ // 00:05:30
        // 数字以外が入力された場合
        if( isNaN( Number(timeArray[0]) ) || isNaN( Number(timeArray[1]) ) || isNaN( Number(timeArray[2]) ) ) return 0; 

        const hours = 
            ( Number(timeArray[0]) > 2 ) ? 2*60*60 : Number(timeArray[0]) * 60 * 60;
        const minutes = 
            ( Number(timeArray[1]) >= 60 ) ? 59*60 : Number(timeArray[1]) * 60 ;
        const seconds = 
            ( Number(timeArray[2]) >= 60 ) ? 59 : Number(timeArray[2]);

        return hours + minutes + seconds;

    }else if( timeArray[1] && !timeArray[2]){ // 05:30
        if( isNaN( Number(timeArray[0]) ) || isNaN( Number(timeArray[1]) )  ) return 0;

        const minutes =
            ( Number(timeArray[0]) >= 60 ) ? 59*60 :  Number(timeArray[0]) * 60 ;
        const seconds = 
            ( Number(timeArray[1]) >= 60 ) ? 59 : Number(timeArray[1]);

        return minutes + seconds;

    }else if(!timeArray[1] && !timeArray[2]){ // 30
        if( isNaN( Number(timeArray[0]) ) ) return 0;

        const seconds = 
            ( Number(timeArray[0]) >= 60 ) ? 59 : Number(timeArray[0]);
            
        return seconds;
        
    }else{
        return 0;
    }
};

関数の概要
convertToSeconds 関数は、与えられた時間文字列をコロン(:)で区切り、その時間を秒単位で返します。入力には以下の形式がサポートされています:

  • 00:05:30(時:分:秒)
  • 05:30(分:秒)
  • 30(秒)

引数と返り値

  • 引数: durationTimestring 型)
    • 文字列で時間を表現します。例えば "00:05:30""30" など。
  • 返り値: number
    • 秒数に変換した結果を返します。無効な入力(例えば、数字以外の文字が含まれる場合)には 0 を返します。

使用例

  1. convertToSeconds("00:05:30")
    秒数に変換すると、330秒(5分30秒)を返します。

  2. convertToSeconds("05:30")
    秒数に変換すると、330秒(5分30秒)を返します。

  3. convertToSeconds("30")
    秒数に変換すると、30秒を返します。

  4. convertToSeconds("00:70:30")
    無効な時間形式として、0を返します。70分は無効とみなされ、最も近い有効な時間(59分30秒)に丸められます。

おわりに

この関数は、さまざまな形式の時間文字列を秒数に変換する便利なツールです。入力が無効な場合は0を返すことで、エラーを防ぎます。また、時間、分、秒の範囲外の値に対しても適切に丸め処理を行っています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?