例えば、開始時刻に
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の先頭で宣言している変数startTimeとaddMinutesの値を適当に変えてみてください。
コメント