public static function getCampTimeline($astimeline, $type) { $camptimeline = Timeline::select('timeline.*', 'camps.name'); $camptimeline->join('camps', function ($join) use($astimeline, $type) { $join->on('camps.id', '=', 'timeline.object_id')->where('object_type', '=', $type)->where('object_id', '=', $astimeline); }); return $camptimeline->orderby('timeline.created_at', 'asc')->get()->toArray(); }
public function managetimeAction() { if (is_null($this->request->getProperty('id'))) { throw new \Exception('Страница не найдена!'); } $id = (int) $this->request->getProperty('id'); $tasksModel = new Tasks(); $this->view->task = $tasksModel->getTasksDataById($id); $timelineModel = new Timeline(); $timelineModel->setWhere(array('tasks_id' => $id)); $timeline = $timelineModel->select(); $timelineToOut = array(); // TODO: учесть распределение времени на границе дня. foreach ($timeline as $item) { $dateTime1 = new \DateTime($item['works_begin']); if ($item['works_end'] == '0000-00-00 00:00:00') { $dateTime2 = new \DateTime(date('Y-m-d H:i:s')); } else { $dateTime2 = new \DateTime($item['works_end']); } $interval = $dateTime2->getTimestamp() - $dateTime1->getTimestamp(); $index = $dateTime1->format('z') . '-' . $dateTime1->format('Y'); if (!isset($timelineToOut[$index])) { $item['day_time_sum'] = gmdate('H часов i минут', $interval); $item['interval'] = $interval; $timelineToOut[$index] = $item; } else { $timelineToOut[$index]['interval'] = $timelineToOut[$index]['interval'] + $interval; $timelineToOut[$index]['day_time_sum'] = gmdate('H часов i минут', $timelineToOut[$index]['interval']); } } $this->view->timeline = $timelineToOut; $seconds = $timelineModel->getTimeSumByTask($id); $hours = floor($seconds / 3600); $mins = floor(($seconds - $hours * 3600) / 60); $this->view->timesum = $hours . ' часов ' . $mins . ' минут'; }