我对此事进行了大量研究,但到目前为止,在寻找解决方案方面还没有运气。
我有一个基于Laravel 5.6构建的项目管理系统,该系统可以跟踪每个制造工位上当前工作项目的时间。
我需要能够找到特定海湾的下一个可用时间,但只能在工作时间/天内。
例如
海湾A的最后一份工作是在07/08/2018 07:00。
原定要持续660分钟(11小时),因此应在10:15 08/08/2018(11个工作小时后,海湾在15:00关闭,还有15分钟)结束标准转换期)。
这意味着我们刚刚添加到系统中的Bay A的下一项工作可以开始于2018年8月15日10:15开始。这样就给了我们一个开始时间,为计算添加到系统中的下一个作业做好了准备。
某些工作可能会持续2000+分钟,这意味着它会持续到第二天/第三天等。因此,我还需要能够确定是周末还是银行假期,而忽略那些日子。
托架的开始/结束时间存储在数据库中(星期一至星期五)。将上一个作业添加到系统后,还将存储时间(以分钟为单位)。
function bay_available($last_job_length, $last_job_start_time, $bay_meta, $changeover_period)
{
}
传递给函数的变量将存储执行计算所需的所有数据。
$last_job_length = 60 // Length, in minutes, of last job entered
$last_job_start_time = 07/08/2018 07:00 // Date format of last job entered
$bay_meta = JSON array containing start/end time of bay
$changeover_period = 15 // Length, in minutes, of changeover job after each job
因此,例如,这是所需的计算。
function bay_available($last_job_length, $last_job_start_time, $bay_meta, $changeover_period)
{
$dayToday = strtolower(date('l')); // Get the day in lowercase
$endOfDay = \Carbon::createFromFormat("Y-m-d H:i", date('Y-m-d') . " " . $bay_meta['endTime'][$dayToday]); // Get current days end time from database in Carbon instance
$timeNow = \Carbon::createFromFormat("Y-m-d H:i", date('Y-m-d H:i'));
$timeDifference = $start->diff($endOfDay);
if($timeDifference > $last_job_length){
// Deduct $timeDifference from $last_job_length
// Check if remaining $last_job_length spans entire next day. If so, add to next day. Be sure to check whether the day is a weekend/non-working day/holiday
}
// Return the date when the bay can next be used
}