JSで文字列表記(hh:mm)時間計算関数 

文字列表記(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;
}

0 件のコメント:

コメントを投稿