前回こちらの記事内のおまけにて、date関数を使って勤務時間を算出しました。
ですが、このままだと、日をまたぐ場合(例えば18時出勤、翌3時退勤など)はうまく勤務時間が算出できません。
なので今回は、日をまたぐ場合にも対応させようと思います。
日をまたぐ場合の勤務時間の出しかた
こちらは前回のコードと同じです。
これをベースにして、改修していきます。
<?php
$start_time = '08:12:34'; //8時12分34秒を代入
$end_time = date('H:m:s'); //現在時刻(時分秒)を代入
print '出勤時間:'.$start_time; //$start_timeの中身を表示
print '<br>'; //改行して・・・
print '退勤時間:'.$end_time; //$end_timeの中身を表示
$work_time_sec = strtotime($end_time)-strtotime($start_time); //退勤時間から開始時間を引いて、勤務時間(秒)を求める
$work_time_hour = floor($work_time_sec/3600); //勤務時間(秒)を3600で割ると、時間を求め、小数点を切り捨てる
$work_time_min = floor(($work_time_sec-($work_time_hour*3600))/60); //勤務時間(秒)から時間を引いた余りを60で割ると、分を求め、小数点を切り捨てる
$work_time_s = $work_time_sec-($work_time_hour*3600+$work_time_min*60); //勤務時間(秒)から時間を引いた余りを60で割ると、分を求め、小数点を切り捨てる
print '<br>'; //改行して・・・
print '勤務時間:'.$work_time_hour.':'; //時 表示
print $work_time_min. ':'; //分 表示
print $work_time_s ; //秒 表示
?>
日をまたぐことを認識させるために、出勤時間と退勤時間に年月日を追加しましょう。
<?php
$start_time = '2020-07-17 8:12:34'; //2020年07月17日 8時12分34秒を代入
$end_time = date('Y-m-d H:m:s'); //現在時刻(年月日時分秒)を代入
print '出勤時間:'.$start_time; //$start_timeの中身を表示
print '<br>'; //改行して・・・
print '退勤時間:'.$end_time; //$end_timeの中身を表示
$work_time_sec = strtotime($end_time)-strtotime($start_time); //退勤時間から開始時間を引いて、勤務時間(秒)を求める
$work_time_hour = floor($work_time_sec/3600); //勤務時間(秒)を3600で割ると、時間を求め、小数点を切り捨てる
$work_time_min = floor(($work_time_sec-($work_time_hour*3600))/60); //勤務時間(秒)から時間を引いた余りを60で割ると、分を求め、小数点を切り捨てる
$work_time_s = $work_time_sec-($work_time_hour*3600+$work_time_min*60); //勤務時間(秒)から時間を引いた余りを60で割ると、分を求め、小数点を切り捨てる
print '<br>'; //改行して・・・
print '勤務時間:'.$work_time_hour.':'; //時 表示
print $work_time_min. ':'; //分 表示
print $work_time_s ; //秒 表示
?>

出勤時間と退勤時間に年月日を追加し、strtotime関数で秒に変換後、差分を勤務時間とすると
日をまたぐ場合の勤務時間を算出できます。
以上、お疲れさまでした!