请用php计算两个时间段2023-04-22 16:43:00到2023-04-23 13:39:20之间的工作耗时,精确到小时(保留两位小数),满足一天的耗时计算只统计8:00到11:30和下午12:30到5:00的时间差,例如:开始时间为:2023-04-22 16:43:00,结束时间为:2023-04-23 13:39:20,耗时为16:43:00到17:00:00所耗费时间段加上8:00:00到11:30:00耗费时间段加上12:30:00到13:39:20时间段
时间: 2023-08-14 15:08:42 浏览: 156
可以使用PHP的DateTime类和相关方法来计算两个时间段之间的工作耗时,并满足一天的耗时计算只统计上午8:00到11:30和下午12:30到5:00的时间差。下面是一个示例代码:
```php
$startTime = new DateTime('2023-04-22 16:43:00');
$endTime = new DateTime('2023-04-23 13:39:20');
// 计算开始时间当天的耗费时间段
$startTimeToday = clone $startTime;
$startTimeToday->setTime(8, 0, 0);
if ($startTimeToday < $startTime) {
$startTimeToday = $startTime;
}
$endTimeToday = clone $startTime;
$endTimeToday->setTime(11, 30, 0);
if ($endTimeToday > $endTime) {
$endTimeToday = $endTime;
}
$intervalToday = $endTimeToday->diff($startTimeToday);
// 计算开始时间的下午耗费时间段
$startTimeAfternoon = clone $startTime;
$startTimeAfternoon->setTime(12, 30, 0);
if ($startTimeAfternoon < $startTime) {
$startTimeAfternoon = $startTime;
}
$endTimeAfternoon = clone $endTime;
$endTimeAfternoon->setTime(17, 0, 0);
if ($endTimeAfternoon > $endTime) {
$endTimeAfternoon = $endTime;
}
$intervalAfternoon = $endTimeAfternoon->diff($startTimeAfternoon);
$totalInterval = new DateInterval('PT0S');
$totalInterval->h += $intervalToday->h + $intervalAfternoon->h;
$totalInterval->i += $intervalToday->i + $intervalAfternoon->i;
$totalInterval->s += $intervalToday->s + $intervalAfternoon->s;
$totalHours = $totalInterval->h + $totalInterval->i/60 + $totalInterval->s/3600;
echo number_format($totalHours, 2);
```
这段代码首先创建了两个DateTime对象,表示开始时间和结束时间。然后,根据开始时间和结束时间的具体情况,通过一些条件判断和调整,计算开始时间当天的上午耗费时间段和下午耗费时间段。
接着,使用`diff()`方法计算时间间隔,并将小时数、分钟数和秒数相加,得到总的耗费时间。最后,将结果保留两位小数打印出来。
阅读全文