Spróbuj:
<?php
$a = 'A';
$b = 'B';
$start_kursu = 1405305685;
$data = 1405305986;
$czas_przerwy = 60; // podajemy w sekundach
$czas = 90; // czas twrania podróży w sekundach
function sprawdz_gdzie_jestes($a, $b, $start_kursu, $czas, $czas_przerwy, $data)
{
$count_travel_time = $czas + $czas_przerwy; // liczymy ile zajmie nam cała droga z pktu A do pkt B + przerwa
$count_dates = $data - $start_kursu; // odejmujemy różnicę - data startu kursu od daty, którą wpisaliśmy aby sprawdzić gdzie jest dany pojazd w danym czasie
$counter = ceil($count_dates/$count_travel_time)*2; // dzielimy różnicę czasu staru kursu od daty, którą sprawdzamy przez całkowity czas trwania jednej podróży wraz z przerwą i zaokrąglamy to w górę
$e_start = $a; // punkt startu
$e_end = $b; // punkt, w którym kurs się kończy
$time = $start_kursu; // startowy czas, jako domyśla wartość - czas startu pierwszego kursu
$return_tab = array(); // tworzymy domyślną tablicę wynikową
for($i=0; $i<=$counter; $i++)
{
$breaking = ($i % 2 !== 0) ? TRUE : FALSE; // sprawdzamy czy obecnie jest przerwa czy jazda, TRUE = PRZERWA, FALSE = JAZDA
$found = FALSE; // zmienna informująca o tym czy obecnie przelatywany rekord w pętli to ten szukany, domyślnie zmiennej przypisujemy FALSE
if ( ($data - $time) <= ($breaking ? $czas_przerwy : $czas) ) // Sprawdzamy czy obecnie przelatywany rekord w pętli to ten, którego szukaliśmy...
{
$found = TRUE; //... jeśli TAK to przypisujemy TRUE
}
if ( $breaking ) // jeśli obecnie przelatywany rekord to przerwa...
{
$return_tab[] = array( // przypisujemy tablicę wynikową 'time_from' => $time+1, // data, od kiedy zaczyna się przerwa
'time_to' => ($breaking ? $time+$czas_przerwy : $time+$czas), // data, kiedy kończy się przerwa
'start' => $e_start, // punkt startu
'end' => $e_end, // punkt kończący trasę
'break' => TRUE, // zmienna logiczna informująca czy ta tablica wynikowa to przerwa, w tym wypadku TAK
'found' => $found ? TRUE : FALSE // sprawdzamy czy ta tablica wynikowa to nasza szukana po dacie
);
}
else // jeśli obecnie przelatywany rekord to jazda...
{
'time_from' => ($i == 0 ? $time : $time+1), // data, od kiedy zaczyna się przerwa
'time_to' => ($breaking ? $time+$czas_przerwy : $time+$czas), // data, kiedy kończy się przerwa
'start' => $e_start, // punkt startu
'end' => $e_end, // punkt kończący trasę
'break' => FALSE, // zmienna logiczna informująca czy ta tablica wynikowa to przerwa, w tym wypadku NIE
'found' => $found ? TRUE : FALSE // sprawdzamy czy ta tablica wynikowa to nasza szukana po dacie
);
}
if ( $found ) // jeśli obecnie przelatywany rekord to nasza szukana...
{
break; // przerywamy pętlę
}
if ( $breaking ) // jeśli obecnie przelatywany rekord to przerwa...
{
$start = $e_start; // przypisujemy do zmiennej $start, punkt startowy z poprzedniego przelotu
// teraz będziemy zamieniać punkt startu z punktem kończącym:
$e_start = $e_end; // przypisujemy do punktu startu, punkt kończący...
$e_end = $start; // oraz do punktu kończącego, punkt startowy
}
$time = $breaking ? $time+$czas_przerwy : $time+$czas; // w zależności czy obecnie przelatywany rekord to była przerwa czy jazda - dodajemy odpowiednią ilość czasu
}
$txt = ''; // zmienna wynikowa (tekstowa), na start pusta
foreach( $return_tab AS $key => $value )
{
if ( $value['break'] == FALSE && $value['found'] == TRUE )
{
$txt .= '<b>'.date('d-m-Y H:i:s', $value['time_from']).' - '.date('d-m-Y H:i:s', $value['time_to']).' - Pojazd obecnie jest w drodze z punktu '.$value['start'].' do punktu '.$value['end'].'</b><br>'; }
else if ( $value['break'] == TRUE && $value['found'] == TRUE )
{
$txt .= '<b>'.date('d-m-Y H:i:s', $value['time_from']).' - '.date('d-m-Y H:i:s', $value['time_to']).' - Pojazd obecnie jest w trakcie przerwy. Przyjechał z punktu '.$value['start'].' do punktu '.$value['end'].'</b><br>'; }
else if ( $value['break'] == TRUE && $value['found'] == FALSE )
{
$txt .= date('d-m-Y H:i:s', $value['time_from']).' - '.date('d-m-Y H:i:s', $value['time_to']).' - Pojazd odbył przerwę, po podróży z punktu '.$value['start'].' do punktu '.$value['end'].'<br>'; }
else if ( $value['break'] == FALSE && $value['found'] == FALSE )
{
$txt .= date('d-m-Y H:i:s', $value['time_from']).' - '.date('d-m-Y H:i:s', $value['time_to']).' - Pojazd odbywał podróż z punktu '.$value['start'].' do punktu '.$value['end'].'<br>'; }
}
return $txt;
}
echo sprawdz_gdzie_jestes
($a, $b, $start_kursu, $czas, $czas_przerwy, $data);
?>