考虑到工作时间/工作日内的完成时间(以分钟为单位),我需要计算给定开始日期的结束日期/SLA。
例如:
- 开始日期 = 2019-03-29 15:00:00
- 完成时间 = 720(分钟)
考虑每天工作 8 小时(上午 9 点至下午 5 点)和周日周末。结束日期应为 2019-04-01 11:00:00。
所以总小时数是 12,
- 2019-03-29 15:00:00 至 17:00:00(2 小时)
- 2019-03-30 09:00:00 至 17:00:00(8 小时)
- 2019-04-01 09:00:00 到 11:00:00(2 小时)
如有任何帮助,我们将不胜感激。
到目前为止,我可以获得不包括周末在内的总工作日数,但我很难获得确切的结束时间。
谢谢。
更新:
$bookingDateTime = Carbon::parse('2019-03-29 15:00:00');
$i = 0;
$completion_in_days = (720/60)/8; //converted minutes in no of days
$working_days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
while($i < ($completion_in_days)){
if(array_search(strtolower($bookingDateTime->englishDayOfWeek), $working_days) !== false){
$i++;
}
$bookingDateTime->addDay();
}
这将给我结束日期。
最佳答案
请找到下面的代码片段,我逐行注释以便理解
$endDate = $startDate = '2019-03-29 15:00:00';
$officeStart = '09:00:00';
$officeEnd = '17:00:00';
$totalHours = 12;
$i = 1;
$flag = false;
while ($totalHours > 0) {
$day = date('D', strtotime($endDate)); // fetching day of week
if ($day == 'Sun') { // checking if sunday thenskip by adding 1 day to end date
$endDate = date('Y-m-d', strtotime($endDate . " +1 Day")) . ' ' . $officeStart; // adding one day if sunday
continue;
}
$diff = strtotime($officeEnd) - strtotime(date("H:i:s", strtotime($endDate))); // getting difference of time of office end date and result end date
$hours = $diff / (3600); // difference in minutes
if ($hours > $totalHours) {
$hours = $totalHours;
$flag = true; // to break loop if last loop comes
} else {
$totalHours = $totalHours - $hours; // substracting hours from total hours left
}
$endDate = date('Y-m-d H:i:s', strtotime("+$hours Hour", strtotime($endDate))); // adding hours which are substracted
if (!$flag) {
$endDate = date('Y-m-d', strtotime($endDate . " +1 Day")) . ' ' . $officeStart; // if not last loop add day to result end date
} else {
break;
}
}
输出
2019-04-01 11:00:00
Demo .
关于php - 从工作时间的开始日期计算结束日期 (SLA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55415027/