従業員の夜勤の取得に問題があります。ナイトディファレンシャルは、午後 10 時から午前 6 時までです。
従業員が午後 7 時から午前 5 時 30 分まで出勤する場合、7 時間 30 分の夜間差があるはずです。
PHPを使用してこれを計算するにはどうすればよいですか?
どうもありがとうございました。
従業員の夜勤の取得に問題があります。ナイトディファレンシャルは、午後 10 時から午前 6 時までです。
従業員が午後 7 時から午前 5 時 30 分まで出勤する場合、7 時間 30 分の夜間差があるはずです。
PHPを使用してこれを計算するにはどうすればよいですか?
どうもありがとうございました。
<?php
define('START_NIGHT_HOUR','22');
define('START_NIGHT_MINUTE','00');
define('START_NIGHT_SECOND','00');
define('END_NIGHT_HOUR','06');
define('END_NIGHT_MINUTE','00');
define('END_NIGHT_SECOND','00');
function night_difference($start_work,$end_work)
{
$start_night = mktime(START_NIGHT_HOUR,START_NIGHT_MINUTE,START_NIGHT_SECOND,date('m',$start_work),date('d',$start_work),date('Y',$start_work));
$end_night = mktime(END_NIGHT_HOUR,END_NIGHT_MINUTE,END_NIGHT_SECOND,date('m',$start_work),date('d',$start_work) + 1,date('Y',$start_work));
if($start_work >= $start_night && $start_work <= $end_night)
{
if($end_work >= $end_night)
{
return ($end_night - $start_work) / 3600;
}
else
{
return ($end_work - $start_work) / 3600;
}
}
elseif($end_work >= $start_night && $end_work <= $end_night)
{
if($start_work <= $start_night)
{
return ($end_work - $start_night) / 3600;
}
else
{
return ($end_work - $start_work) / 3600;
}
}
else
{
if($start_work < $start_night && $end_work > $end_night)
{
return ($end_night - $start_night) / 3600;
}
return 0;
}
}
var_dump(night_difference(strtotime('today 19:00'),strtotime('tomorrow 05:30')));
var_dump(night_difference(strtotime('today 10:00'),strtotime('today 19:00')));
var_dump(night_difference(strtotime('yesterday 10:00'),strtotime('today 08:00')));
var_dump(night_difference(strtotime('yesterday 23:00'),strtotime('today 04:00')));
出力:
float(7.5)
int(0)
int(8)
int(5)