根据不同的时间范围计算费率

时间:2016-07-04 20:33:29

标签: php

必填结果:根据时间范围之间的工作小时数输出费率金额总和

操作:选择 shift 开始结束次。单击“提交”。

例如......

If my shift is 8:00PM ~ 4:00AM. 

    Rate 1: Between 12AM ~ 7AM :: $3.00/hr
    Rate 2: Between 7PM ~ 12AM :: $2.00/hr

    The result should be: 
    4hrs x $2.00 [8PM ~ 12AM] = $8.00
    and
    4hrs x $3.00 [12AM ~ 4AM] = $12.00 

Total of $20.00

enter image description here

更新1: 结束了这个:

$rate1_total = 0;
$rate2_total = 0;
$curdate = date();
$startshift = "20:00:00";   //8PM
$endshift = "04:00:00";     //4AM

$rate1_start = "00:00:00"; //12AM
$rate1_end = "07:00:00";   //7AM
$rate1_amount = 3.00;

$rate2_start = "19:00:00"; //7PM
$rate2_end = "23:59:59";   //11:59:59 (midnight)
$rate2_amount = 2.00;

$start = date("Y-m-d H:i:s", strtotime("$curdate $startshift"));
$end = date("Y-m-d H:i:s", strtotime("$curdate $endshift"));

$begin = new DateTime($start);
$end = new DateTime($end);

$interval = DateInterval::createFromDateString('1 hour');
$period = new DatePeriod($begin, $interval, $end);

foreach($period as $dt) {
    $dateloop = $dt->format("H:i:s");

    if (dateIsBetween($shiftstart1, $shiftend1, $dateloop))
        $rate1_total += 1;

    if (dateIsBetween($shiftstart2, $shiftend2, $dateloop))
        $rate2_total += 1;
}

    $rate1_amt = $rate1_total*$shiftrate1;
    $rate2_amt = $rate2_total*$shiftrate2;

 echo "Rate1: $rate1_total ($$rate1_amt) <br>
       Rate2: $rate2_total ($$rate2_amt) <br>";
对于dateIsBetween函数,

归功于 Hamish https://stackoverflow.com/a/4191900/1978485):

function dateIsBetween($from, $to, $date = 'now') {
    $date = is_int($date) ? $date : strtotime($date); // convert non timestamps
    $from = is_int($from) ? $from : strtotime($from); // ..
    $to = is_int($to) ? $to : strtotime($to);         // ..
    return ($date >= $from) && ($date <= $to); // extra parens for clarity
}

如果有人知道更好的方法,请发帖。

0 个答案:

没有答案
相关问题