文字列表記(hh:mm)の時間を足したり引いたり。
24時間以上表記対応です。夜間シフトの時間計算に用意しました。21:00~30:00勤務の時間とか計算できます。
23/12/12更新
24時間超えだす足し算がおかしいので修正。このあたりAI支援して貰う場合、意図が伝わりづらい・・・結局かなり手直し。
文字列時刻の差を計算する
// 時刻の差を計算する関数
function timeStringDifference(timeStr1, timeStr2) {
//時刻文字列をDateオブジェクトに変換する関数
const [hours1, minutes1] = timeStr1.split(':').map(Number);
const time1 = new Date();
time1.setHours(hours1);
time1.setMinutes(minutes1);
time1.setSeconds(0);
const [hours2, minutes2] = timeStr2.split(':').map(Number);
const time2 = new Date();
time2.setHours(hours2);
time2.setMinutes(minutes2);
time2.setSeconds(0);
// 時刻が次の日にまたがる場合の補正
if (time2 < time1) {
time2.setDate(time2.getDate() + 1);
}
const diff = time2.getTime() - time1.getTime();
// 時間と分に変換
const hours = Math.floor(diff / (1000 * 60 * 60));
const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
return { hours, minutes };
}
時刻を足す
function timeStringAdd(startTime, addedHours, addedMinutes) {
const [startHours, startMinutes] = startTime.split(':').map(Number);
// 時間と分を加算
let resultHours = startHours + addedHours;
let resultMinutes = startMinutes + addedMinutes;
// 分が60を超えた場合、時間を調整
if (resultMinutes >= 60) {
resultHours += Math.floor(resultMinutes / 60);
resultMinutes %= 60;
}
// 時刻を文字列に変換
const formattedHours = String(resultHours);
const formattedMinutes = String(resultMinutes).padStart(2, '0');
return { hours: formattedHours, minutes: formattedMinutes };
}
時刻を比較する
//時刻文字列を比較して結果を返す関数
function timeStringCompare(time1, time2) {
const [hours1, minutes1] = time1.split(':').map(Number);
const [hours2, minutes2] = time2.split(':').map(Number);
// 時間の比較
if (hours1 < hours2) {
return -1;
} else if (hours1 > hours2) {
return 1;
}
// 分の比較 (同じ時間の場合)
if (minutes1 < minutes2) {
return -1;
} else if (minutes1 > minutes2) {
return 1;
}
// 時間と分が同じ場合
return 0;
}