Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Określenie lokalizacji obiektu w konkretnym czasie
northwest
post
Post #1





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


Witam serdecznie,
Mam dość nietypowy problem.
Mam następujące zmienne:
$A - nazwa punktu startowego
$B - nazwa punktu docelowego
$CZAS - czas w jakim pojazd jedzie z punktu A do punktu B
$CZAS_PRZERWY - 1h (przerwa po dotarciu pojazdu z punktu A do punktu B lub z B do A - pojazd jeździ w kółko). Czyli przykładowo pojazd przyjechał z punktu B do A o 14.05 - to wyjazd z punktu A do B nastąpi o 15.05.

Pojazdy jeżdżą w "kółko" z zachowaniem przerwy.

Potrzebuję funkcję która określi w jakim punkcie będzie pojazd (lub do jakiego będzie zmierzał) o konkretnej godzinie i dacie.

Czyli pojazd sobie jeździ - wybieram termin 2014-07-26 11:43 - i funkcja powinna zwrócić informację w którym punkcie będzie pojazd.

Ma ktoś może pomysł jak to zrobić?

Bardzo proszę o pomoc,
Northwest

zapomniałem dodać w poprzednim poście, mamy jeszcze $CZAS_STARTU_KURSOW = data i czas pierwszego kursu
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Michael2318
post
Post #2





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

Ostrzeżenie: (0%)
-----


Spróbuj:

  1. <?php
  2.  
  3. $a = 'A';
  4. $b = 'B';
  5. $start_kursu = 1405305685;
  6. $data = 1405305986;
  7. $czas_przerwy = 60; // podajemy w sekundach
  8. $czas = 90; // czas twrania podróży w sekundach
  9.  
  10. function sprawdz_gdzie_jestes($a, $b, $start_kursu, $czas, $czas_przerwy, $data)
  11. {
  12. $count_travel_time = $czas + $czas_przerwy; // liczymy ile zajmie nam cała droga z pktu A do pkt B + przerwa
  13. $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
  14. $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ę
  15.  
  16. $e_start = $a; // punkt startu
  17. $e_end = $b; // punkt, w którym kurs się kończy
  18. $time = $start_kursu; // startowy czas, jako domyśla wartość - czas startu pierwszego kursu
  19. $return_tab = array(); // tworzymy domyślną tablicę wynikową
  20.  
  21. for($i=0; $i<=$counter; $i++)
  22. {
  23. $breaking = ($i % 2 !== 0) ? TRUE : FALSE; // sprawdzamy czy obecnie jest przerwa czy jazda, TRUE = PRZERWA, FALSE = JAZDA
  24. $found = FALSE; // zmienna informująca o tym czy obecnie przelatywany rekord w pętli to ten szukany, domyślnie zmiennej przypisujemy FALSE
  25.  
  26. if ( ($data - $time) <= ($breaking ? $czas_przerwy : $czas) ) // Sprawdzamy czy obecnie przelatywany rekord w pętli to ten, którego szukaliśmy...
  27. {
  28. $found = TRUE; //... jeśli TAK to przypisujemy TRUE
  29. }
  30.  
  31. if ( $breaking ) // jeśli obecnie przelatywany rekord to przerwa...
  32. {
  33. $return_tab[] = array( // przypisujemy tablicę wynikową
  34. 'time_from' => $time+1, // data, od kiedy zaczyna się przerwa
  35. 'time_to' => ($breaking ? $time+$czas_przerwy : $time+$czas), // data, kiedy kończy się przerwa
  36. 'start' => $e_start, // punkt startu
  37. 'end' => $e_end, // punkt kończący trasę
  38. 'break' => TRUE, // zmienna logiczna informująca czy ta tablica wynikowa to przerwa, w tym wypadku TAK
  39. 'found' => $found ? TRUE : FALSE // sprawdzamy czy ta tablica wynikowa to nasza szukana po dacie
  40. );
  41. }
  42. else // jeśli obecnie przelatywany rekord to jazda...
  43. {
  44. $return_tab[] = array(
  45. 'time_from' => ($i == 0 ? $time : $time+1), // data, od kiedy zaczyna się przerwa
  46. 'time_to' => ($breaking ? $time+$czas_przerwy : $time+$czas), // data, kiedy kończy się przerwa
  47. 'start' => $e_start, // punkt startu
  48. 'end' => $e_end, // punkt kończący trasę
  49. 'break' => FALSE, // zmienna logiczna informująca czy ta tablica wynikowa to przerwa, w tym wypadku NIE
  50. 'found' => $found ? TRUE : FALSE // sprawdzamy czy ta tablica wynikowa to nasza szukana po dacie
  51. );
  52. }
  53.  
  54. if ( $found ) // jeśli obecnie przelatywany rekord to nasza szukana...
  55. {
  56. break; // przerywamy pętlę
  57. }
  58.  
  59. if ( $breaking ) // jeśli obecnie przelatywany rekord to przerwa...
  60. {
  61. $start = $e_start; // przypisujemy do zmiennej $start, punkt startowy z poprzedniego przelotu
  62. // teraz będziemy zamieniać punkt startu z punktem kończącym:
  63. $e_start = $e_end; // przypisujemy do punktu startu, punkt kończący...
  64. $e_end = $start; // oraz do punktu kończącego, punkt startowy
  65. }
  66.  
  67. $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
  68. }
  69.  
  70. $txt = ''; // zmienna wynikowa (tekstowa), na start pusta
  71.  
  72. foreach( $return_tab AS $key => $value )
  73. {
  74. if ( $value['break'] == FALSE && $value['found'] == TRUE )
  75. {
  76. $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>';
  77. }
  78. else if ( $value['break'] == TRUE && $value['found'] == TRUE )
  79. {
  80. $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>';
  81. }
  82. else if ( $value['break'] == TRUE && $value['found'] == FALSE )
  83. {
  84. $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>';
  85. }
  86. else if ( $value['break'] == FALSE && $value['found'] == FALSE )
  87. {
  88. $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>';
  89. }
  90. }
  91.  
  92. return $txt;
  93. }
  94.  
  95. echo sprawdz_gdzie_jestes($a, $b, $start_kursu, $czas, $czas_przerwy, $data);
  96.  
  97. ?>


Ten post edytował Michael2318 24.07.2014, 10:16:31
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 19:46