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; }
0 件のコメント:
コメントを投稿