updateActDuration(); }); } public function updateActDuration(){ $daysOff = explode(',', $this->config_dayoff); if (in_array('0', $daysOff)) { $key = array_search('0', $daysOff, false); $daysOff[$key] = '7'; } $activities = Activity::where('version_gantt_id', $this->id)->get(); foreach ($activities as $value) { $exist = Link::where('t_activity_id', $value->id)->exists(); $startDate = new DateTime($value->start_date); $endDate = new DateTime($value->end_date); $duration = $endDate->diff($startDate)->days + 1; if ($exist) { $duration--; } // Iterate through each day and subtract the days off for ($i = 0; $i < $duration; $i++) { $currentDate = clone $startDate; $currentDate->modify("+$i day"); $currentDayOfWeek = $currentDate->format('N'); // Get the day of the week (1 - Monday, 7 - Sunday) if (in_array($currentDayOfWeek, $daysOff)) { $duration--; // Subtract one day from the duration for each day off } } // Update the activity duration $value->duration = $duration; $value->save(); } } }