Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Obliczanie czasu zapytania - czy dobrze?
Forum PHP.pl > Forum > Przedszkole
Matado
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. ?>
vokiel
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?
Pawel_W
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
Matado
Po prostu chcę mieć pewność czy dobrze działa dlatego pytam. A substr() użyłem po to, żeby wyświetlało 5 liczb.
thek
@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.
Pawel_W
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
vokiel
@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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.