Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL] Obliczanie czasu zapytania - czy dobrze?
Matado
post 25.08.2009, 21:25:30
Post #1





Grupa: Zarejestrowani
Postów: 67
Pomógł: 0
Dołączył: 9.12.2008

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


Napisałem taki kod do obliczania czasu zapytania. Na localu czas wynosi w przedziale mniej więcej 0.0005 - 0.0009 . Czy ten kod dobrze oblicza czas wykonania zapytania?

  1. <?php
  2.  
  3. $start= microtime();
  4. // Jakieś zapytanie
  5. $end= microtime();
  6.  
  7. echo substr ($end - $start, 0 , 6);
  8.  
  9. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
vokiel
post 25.08.2009, 21:58:06
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Substr nie służy do zaokrąglania liczby, do tego jest ceil, czy floor

Ogólnie tak, obliczanie czasu działania skryptu polega na odjęciu od godziny zakończenia godziny rozpoczęcia. Dobrze jest wynik przedstawić w sensownych jednostkach, łatwych do zrozumienia, tj. minut, sekund, mikrosekund etc.

Tak w ogóle czy z taką rzeczą jak obliczanie różnicy czasu trzeba lecieć na forum?


--------------------
Go to the top of the page
+Quote Post
Pawel_W
post 25.08.2009, 22:00:32
Post #3





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


Cytat(vokiel @ 25.08.2009, 22:58:06 ) *
Substr nie służy do zaokrąglania liczby, do tego jest ceil, czy floor

Ogólnie tak, obliczanie czasu działania skryptu polega na odjęciu od godziny zakończenia godziny rozpoczęcia. Dobrze jest wynik przedstawić w sensownych jednostkach, łatwych do zrozumienia, tj. minut, sekund, mikrosekund etc.

Tak w ogóle czy z taką rzeczą jak obliczanie różnicy czasu trzeba lecieć na forum?

jak chcesz zaokrąglić to chyba round() winksmiley.jpg
Go to the top of the page
+Quote Post
Matado
post 25.08.2009, 22:04:34
Post #4





Grupa: Zarejestrowani
Postów: 67
Pomógł: 0
Dołączył: 9.12.2008

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


Po prostu chcę mieć pewność czy dobrze działa dlatego pytam. A substr() użyłem po to, żeby wyświetlało 5 liczb.
Go to the top of the page
+Quote Post
thek
post 25.08.2009, 22:18:56
Post #5





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




@Pawel_W: są 3 funkcje zaokrąglające:
round() - zaokrągla do najbliższej liczby naturalnej
floor() - zaokrągla do najbliższej mniejszej lub równej liczby
ceil() - zaokrągla do najbliższej większej lub równej liczby naturalnej
Jaka jest różnica?
Sprawdź na 4.7 i 4.4 winksmiley.jpg

round(4.4) = 4
floor(4.4) = 4
ceil(4.4) = 5

round(4.7) = 5
floor(4.7) = 4
ceil(4.7) = 5
Widzisz różnicę?
Round "skacze" zależnie czy jest poniżej czy powyżej połówki.

@vokiel: Dwie ostatnie z tych funkcji jakie wspomniałeś zaokrąglają do całości. A my substr wyciągamy z wyniku jedynie 6 pierwszych znaków.

Więc oboje nie macie racji do końca. A dlaczego po części? Bo ostatecznie bym użył zapewne funkcji round tak jak wspomniał Pawel_W, ale ustawił jej drugi parametr (precyzję) na 5 lub 6, dzięki czemu miałbym wynik do 5 lub 6 miejsca po przecinku.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Pawel_W
post 25.08.2009, 22:19:34
Post #6





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


Cytat(Matado @ 25.08.2009, 23:04:34 ) *
Po prostu chcę mieć pewność czy dobrze działa dlatego pytam. A substr() użyłem po to, żeby wyświetlało 5 liczb.

chyba cyfr haha.gif

wg pomysł poprawny winksmiley.jpg
Go to the top of the page
+Quote Post
vokiel
post 26.08.2009, 07:22:03
Post #7





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


@thek no jasne, że trzeba ustawić precyzję, ale IMHO to było oczywiste, tym bardziej przy microtime.

Substr — jak mówi manual — zwraca fragment ciągu tekstowego.
Microtime — zwraca aktualny uniksowy znacznik czasu z mikrosekundami.

Pomimo braku jawnego rzutowania typów, moim zdaniem, powinno używać się funkcji do tego przeznaczonych.

Przykładowo:
  1. $start = 16127.1601251266477;
  2. $stop = 16127.66001251266477;
  3. $roznica = $stop - $start;
  4.  
  5. echo '<br />'.round($roznica,4); // 0.4999
  6. echo '<br />'.substr ($roznica, 0 , 6); // 0.4998
  7. // jest różnica, prawda? a jak pójdziemy parę kroków dalej:
  8. echo '<br />'.round($roznica,1); // 0.5
  9. echo '<br />'.substr ($roznica, 0 , 3); // 0.4
  10. // A jak te dane teraz ktoś zaokrągli do liczb całkowitych? z 0.5 => 1, a z 0.4 => 0


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 02:10