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%)
-----


Napisałem na szybko takie cuś:

  1. <?php
  2.  
  3. $a = 'A';
  4. $b = 'B';
  5. $start_kursu = 1405305685;
  6. $data = 1405305795;
  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); // dzielimy różnicę czasu staru kursu od daty, którą wpisaliśmy aby sprawdzić gdzie jest dany pojazd przez całkowity czas trwania jednej podróży wraz z przerwą i zaokrąglamy to w górę
  15.  
  16. $e_start = $a;
  17. $e_end = $b;
  18. $time = $start_kursu;
  19. $return_tab = array();
  20.  
  21. for($i=0; $i<=$counter; $i++)
  22. {
  23. if ( ($data - $time) <= $count_travel_time )
  24. {
  25. if ( ($data - $time) >= $czas )
  26. {
  27. $return_tab = array(
  28. 'start' => $e_start,
  29. 'end' => $e_end,
  30. 'break' => TRUE
  31. );
  32.  
  33. break;
  34. }
  35. else
  36. {
  37. $return_tab = array(
  38. 'start' => $e_start,
  39. 'end' => $e_end,
  40. 'break' => FALSE
  41. );
  42.  
  43. break;
  44. }
  45. }
  46.  
  47. $start = $e_start;
  48. $e_start = $e_end;
  49. $e_end = $start;
  50. $time = $time+$count_travel_time;
  51. }
  52.  
  53. if ( $return_tab['break'] == FALSE )
  54. {
  55. return 'Pojazd obecnie jest w drodze z punktu '.$return_tab['start'].' do punktu '.$return_tab['end'];
  56. }
  57. else
  58. {
  59. return 'Pojazd obecnie jest w trakcie przerwy. Przyjechał z punktu '.$return_tab['start'].' do punktu '.$return_tab['end'];
  60. }
  61. }
  62.  
  63. echo sprawdz_gdzie_jestes($a, $b, $start_kursu, $czas, $czas_przerwy, $data);
  64.  
  65. ?>


Ale musisz sprawdzić jakoś kalkulatorem czy to w ogóle dobrze oblicza. Po prostu na kartce przeliczyć i porównać wynik z tym co zwróci ta funkcja.
Daty są w formacie timtestamp.

Najpierw komentowałem co po niektóre linie, ale potem mi się odechciało, jak coś to pytaj (IMG:style_emoticons/default/tongue.gif)

EDIT:

Tu masz jeszcze gotową funkcję do zmiany zwykłych dat na format timtestamp: http://phpkurs.pl/przetwarzanie-daty/ :

  1. <?php
  2.  
  3. $dzien = 10;
  4. $miesiac = 4;
  5. $rok = 2002;
  6. $godzina = 12;
  7. $minuta = 32;
  8. $sekunda = 0;
  9.  
  10. $ts = mktime($godzina, $minuta, $sekunda, $miesiac, $dzien, $rok);
  11.  
  12. ?>


Ten post edytował Michael2318 23.07.2014, 16:35:20
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: 13.10.2025 - 16:34