Здравствуйте! Помогите со следующей задачкой) Сервер не работал с 01.07.2010 10:51:32 по 05.07.2010 16:17:51 (это из БД идёт) Но надо считать время его дауна только для след-х интервалов: Понедельник - Пятница 07:00 - 23:00 Суббота - 09:00 - 15:00 Воскресенье - 12:00 - 23:00 Пробовал использовать mktime(), но он удобен для сравнения, а для разности дат его не получается использовать... Заранее спасибо!)
PHP: //$t1 -начало интервала из базы //$t2 -конец интервала из базы //превращаем в секунды $ts1=strtotime($t1); $ts2=strtotime($t2); $d=intval(date("d",$ts1)); $m=intval(date("m",$ts1)); $y=intval(date("Y",$ts1)); $start=$ts1; $ok=true; $nojob=0;//время простоя do { $next=mktime(0,0,1,$m,$d+1,$y); //начало следующего дня $daystart=$start; if($next<=$ts2) { $dayend=mktime(23,59,59,$m,$d,$y); $start=$next; } else { $dayend=$ts2; $ok=false; } $dweek=date("w",$daystart); //0-Sunday,6-Saturday if($dweek==0) { $startjob=mktime(12,00,00,$m,$d,$y); $endjob=mktime(23,00,00,$m,$d,$y); } elseif($dweek==6) { $startjob=mktime(9,00,00,$m,$d,$y); $endjob=mktime(15,00,00,$m,$d,$y); } else { $startjob=mktime(7,00,00,$m,$d,$y); $endjob=mktime(23,00,00,$m,$d,$y); } if($daystart<$startjob) { $startNojob=$startjob; } else { $startNojob=$daystart; } if($dayend<$endjob) { $endNojob=$dayend; } else { $endNojob=$endjob; } $nojob=$nojob+$endNojob-$startNojob; $d++; }while ($ok); print $nojob; Идея 1) разбить весь период по дням 2) для каждого дня определить * начало и конец дня * начало и конец учитываемого простоя 3) вычислить простой