Php 计算一个班次的总工资?

Php 计算一个班次的总工资?,php,mysql,Php,Mysql,比方说 A员工工作时间为2016-12-31 23:30下午至2017-01-01 06:30上午 在这里,我需要根据以下规则计算总工资率: Rule# | Date | StartTime | EndTime | WageRate(HR) 1 | 2016-12-31 | 07:00 | 23:59 | 25 2 | 2017-01-01 | 00:00 | 06:00 | 40 3 | 2017-01-01 | 06

比方说

A员工工作时间为2016-12-31 23:30下午至2017-01-01 06:30上午

在这里,我需要根据以下规则计算总工资率:

Rule#  | Date       | StartTime | EndTime | WageRate(HR)    
1      | 2016-12-31 | 07:00     | 23:59   | 25
2      | 2017-01-01 | 00:00     | 06:00   | 40
3      | 2017-01-01 | 06:00     | 11:30   | 30
请尝试此查询

select Rule,Date,StartTime,Endtime,WageRate,
-1 * timediff(StartTime,EndTime) * Wagerate as total
from hr;
如果根据小时数计算,请尝试此查询

select Rule,Date,StartTime,Endtime,WageRate,
-1 * timediff(StartTime,EndTime) * Wagerate as total
from hr;

如果您根据小时数进行计算,则以下内容适用于PHP。我使用了一个虚拟数组作为示例

$arr = [

        ['Date'=>'2016-12-31', 'StartTime' => '07:00', 'EndTime' => '23:59', 'Rate' => 25],
        ['Date'=>'2017-01-01', 'StartTime' => '00:00', 'EndTime' => '06:00', 'Rate' => 40],
        ['Date'=>'2017-01-01', 'StartTime' => '06:00', 'EndTime' => '11:30', 'Rate' => 30]

];

function salaryCalc($start, $end, $rate) {

    $timeStart = strtotime($start);
    $timeEnd = strtotime($end);
    $diff = $timeEnd - $timeStart;
    $diffHours = round(($diff/60)/60); //I'm guessing you will pay them for the hour
    return $diffHours * $rate;

}


foreach($arr as $v) {

   echo 'Wage: ' . salaryCalc($v['StartTime'], $v['EndTime'], $v['Rate']); 
   echo '<br>';

}
编辑:


我完全支持帮助别人,但自从你上次澄清你的问题以来,我很清楚你甚至不打算自己解决这个问题,所以除非你提供一些代码,向我和其他人展示我的努力,否则我退出

以下内容适用于PHP。我使用了一个虚拟数组作为示例

$arr = [

        ['Date'=>'2016-12-31', 'StartTime' => '07:00', 'EndTime' => '23:59', 'Rate' => 25],
        ['Date'=>'2017-01-01', 'StartTime' => '00:00', 'EndTime' => '06:00', 'Rate' => 40],
        ['Date'=>'2017-01-01', 'StartTime' => '06:00', 'EndTime' => '11:30', 'Rate' => 30]

];

function salaryCalc($start, $end, $rate) {

    $timeStart = strtotime($start);
    $timeEnd = strtotime($end);
    $diff = $timeEnd - $timeStart;
    $diffHours = round(($diff/60)/60); //I'm guessing you will pay them for the hour
    return $diffHours * $rate;

}


foreach($arr as $v) {

   echo 'Wage: ' . salaryCalc($v['StartTime'], $v['EndTime'], $v['Rate']); 
   echo '<br>';

}
编辑:


我完全支持帮助别人,但自从你上次澄清你的问题以来,我很清楚你甚至不打算自己解决这个问题,所以除非你提供一些代码,向我和其他人展示我的努力,否则我退出

结果应如下所示:

On 2016-12-31
23:30- 23:59. =29 min  rate can be taken from rule #1


On 2017-01-01
00:00 - 06:00 = 6hr rate apply from rule #2
06:00 - 06:30. =30min rate apply from rule #3

结果应如下所示:

On 2016-12-31
23:30- 23:59. =29 min  rate can be taken from rule #1


On 2017-01-01
00:00 - 06:00 = 6hr rate apply from rule #2
06:00 - 06:30. =30min rate apply from rule #3

你的意思是你想计算小时工资的加权平均值吗?是的,我想计算轮班规则1,2,3的总工资率。你的意思是你想计算小时工资的加权平均值吗?是的,我想计算轮班规则1,2,3的总工资率,3我尝试将开始工作时间增加一小时,但在规则1和规则2中失败。任何帮助对我来说都是巨大的。我尝试将开始工作时间增加一小时,但在规则1和规则2中失败。任何帮助对我来说都是巨大的。