日付を除外して時間のみを求める方法がなかったのでまとめ
<?php $from_h = '8'; // 08でも可 $from_m = '10'; $to_h = '17'; $to_m = '00'; echo sectostr(strtosec($to_h, $to_m) - strtosec($from_h, $from_m)); // 08:50と表示されます function sectostr($val) { return sprintf("%02d:%02d", $val / 3600, ($val % 3600) / 60); } function strtosec($h, $m) { return $h * 3600 + $m * 60; }
時間と分を秒に直して差分を出しています。
秒に直すのでstrtotimeやnew DateTimeにて比較しなくてもいいです。
strtotimeとnew DateTimeは日付ありきでの比較になるので時間のみの差分を出すときややこしいです。
下記一例
<?php echo date('Y/m/d H:i', strtotime('17:00') - strtotime('8:10')); // 1970/01/01 09:50と表示
strtotimeだと日付の引き算がされ時間のみの差分が出せません。
強引にやるならこう
<?php echo date('Y/m/d H:i', strtotime('17:00') - strtotime('8:10') + strtotime(date('Y/m/d'))); // 2021/08/14 08:50と表示
引き算された日付を最後に足して日付のつじつまを合わせていますが、このコードは休憩時間を除いたりするときに日付のことを常に考えなくてはならずややこしすぎて使えません。