JavaScript:指定した時刻のn分先の時刻を求める

JavaScript

例えば、開始時刻

12:17

という文字列が与えられ

n分先の数値として

110

が与えられたら、

14:07

という開始時刻からn分先の終了時刻の文字列を得るためのJavaSciriptプログラムです。

検定試験の開始時刻は分かっていて、そのn分先の終了時刻が知りたいときに使いたいと思いました。

ソースコード

解説はコメント文が全てです。

index.html

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="main.js"></script>
    <title>指定した時刻のn分先の時刻を求める</title>
</head>
<body>
    <p>コンソールに表示...</p>    
</body>
</html>

main.js

// main.js

window.addEventListener("load", ()=>{
    const startTime = "12:17";  // 開始時刻
    const addMinutes = 110;     // 終了までの時間(単位:分)

    // 時・分に分割
    let [startHour, startMinute] = startTime.split(":");

    // 時・分の文字がない又は数値として認識できない場合「NG」と表示
    if(startHour === "" || startMinute === "" || isNaN(startHour) || isNaN(startMinute)){
        console.log("NG");
    }
    else{   // 時・分が数値として取り出せた場合(正常な場合)
        // 時分を数値化する
        startHour = Number(startHour);
        startMinute = Number(startMinute);

        // 時が0~23で、分が0~59の範囲であれば終了時刻を求める
        if(startHour >= 0 && startHour <= 23 && startMinute >= 0 && startMinute <= 59){
            // 日付は関係ないので適当に2000年1月1日の時刻としてDate型で設定
            let startDate = new Date(`2000/01/1 ${startHour}:${startMinute}:00`);
            console.log(startDate);

            // 開始時刻から終了までの時間(分)を足す(ただしミリ秒単位)
            const endDateNum = startDate.getTime() + addMinutes * 60 * 1000;

            // ミリ秒単位のデータをDate型に直す(時分を別々に取得するため)
            const endDate = new Date(endDateNum);
            console.log(endDate);

            // 終了時刻を時・分に分けて取得
            const [endHour, endMinute] = [endDate.getHours(), endDate.getMinutes()];

            // hh:mmの形式の文字列に整形する ex) 14:07
            const endTime = endHour.toString().padStart(2, "0") + ":" + endMinute.toString().padStart(2, "0");

            // 結果を表示する ex) 12:17 ~ 14:07(110分)
            console.log(`${startTime} ~ ${endTime}(${addMinutes}分)`);
        }
        else{   // 時分が範囲外の数値なら「NG」と表示
            console.log("NG");
        }
    }

});

実行イメージ(コンソールF12に表示されます)

Sat Jan 01 2000 12:17:00 GMT+0900 (日本標準時)
Sat Jan 01 2000 14:07:00 GMT+0900 (日本標準時)
12:17 ~ 14:07(110分)

main.jsの先頭で宣言している変数startTimeaddMinutesの値を適当に変えてみてください。

コメント

タイトルとURLをコピーしました