必填结果:根据时间范围之间的工作小时数输出费率金额总和
操作:选择 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
更新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
}
如果有人知道更好的方法,请发帖。