내 앱에서 프로젝트를 만들 수 있으며 각 프로젝트별로 작업 보고서를 기록 할 수 있습니다. 각 보고서에는 시작 및 종료 시간 소인이 있습니다. 프로젝트 설명의 표에는이 프로젝트의 모든 보고서가 표시되며 기간 (DateTime 및 시작 및 종료 타임 스탬프 사이에 사용되는 diff() 함수 사용)도 계산됩니다. 이제 프로젝트의 총 작업 시간을 계산하고 싶지만 어떻게 할 수 있는지 잘 모릅니다. 이미 날짜 시간 함수를 사용하여 어떻게 든 다음 모든 보고서를 통해 반복했지만, 나는 ... 내 마지막 필사적 인 시도이 있었다 효과가없고 해요 :PHP에서 다중 간격을 요약하는 방법
public static function calculateDuration($start, $end)
{
$start = date('Y-m-d H:i:s', $start);
$end = date('Y-m-d H:i:s', $end);
$s = new \DateTime($start);
$e = new \DateTime($end);
$interval = $e->diff($s);
return $interval->format('%H:%I');
}
public static function calculateTotal($idProject)
{
$reports = self::find('id_project = "' . $idProject . '"');
$totalReports = new \DateTime();
foreach ($reports as $report) {
$totalReports->add(new \DateInterval(self::calculateDuration($report->getStart(), $report->getEnd())));
}
/*echo '<pre>';
die(var_dump($totalReports));
echo '</pre>';*/
return $totalReports->format('H:I');
}
calculateDuration 기능이 완벽하게 작동하지만, 물론 calculateTotal하지 않는 왜냐하면 DateInterval은 "0:30"과 같은 문자열을 사용하지 않기 때문입니다. 그래서 그것은 완전히 쓸모가 없습니다 ...
나는 필요한 정보를 모두 제공했으면 좋겠어. 이미 calculateDuration
모든 일을 가지고, 그것은 내부적으로 DateInterval 객체를 다루는 : 내 의견에 명확성을 위해
// Untested. Might need escaping.
return $interval->format('PT%HH%IM');
'DateInterval'을 문자열로 형식화 한 후 다시'DateInterval' 개체로 다시 만들면 안됩니다. 'calculateDuration' 함수에서'DateInterval' 객체를 반환하거나 간격을 반환하고'calculateDuration'에서 내부적으로 사용하는 별도의 함수를 가지고 있습니다. – cmbuckley
@cbuckley 또한이 함수를 사용하여 단일 보고서의 기간을 출력합니다 ... 따라서 calculateDuration의 반환 값을 변경할 수 없거나 많은 오류 메시지가 나타납니다 –
그 두 번째 옵션의 의미는 다음과 같습니다. 별도의 기능, 예. 'calculateInterval'은 interval 객체를 반환합니다. 그렇다면'calcalateDuration'은'return calculateInterval() -> format ('% H : % I');'이됩니다. 그런 다음 루프에서'calculateInterval'을 사용하십시오. calculateDuration 함수의 – cmbuckley