Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Połączenia ciągów microtime() w liczbę całkowitą
Forum PHP.pl > Forum > PHP
Mistrig
Witam
Przy poszczególnych wiadomościach zapisuje czas ich zapisania za pomocą time(), niestety dokładność time() jest zbyt mała, więc zainteresowałem się funkcją microtime(). Problemem jest to, że podaje ona oddzielnie mikrosekundy i sekundy. W manualu znalazłem poniższą funkcję:
  1. <?php
  2. function getmicrotime(){
  3. list($usec, $sec) = explode(" ",microtime());
  4. return ((float)$usec + (float)$sec);
  5. }
  6. ?>

Łączy ona oba ciągi tworząc jedną liczbę zmiennoprzecinkową co by mi wystarczyło z czego jednak wiem operacje na liczbach zmiennoprzecinkowych są wolniejsze od operacji na zwykłych liczbach (jeśli jest inaczej wyprowadźcie mnie z błędu). Postanowiłem więc utworzyć jedną liczbę łącząc liczbę sekund z dwiema pierwszymi liczbami mikrosekund:
  1. <?php
  2. function getmicrotime()
  3. {
  4. list($msec, $sec) = explode(' ', microtime());
  5.  
  6. $msec *= 100;
  7.  
  8. $int = $sec.(int)$msec;
  9.  
  10. return $int;
  11. }
  12. ?>

Problem jednak gdy liczba mikrosekund jest mniejsza niż 10 np. 0,03. Wtedy po pomnożeniu przez 100 otrzymam liczbę 3. Natomiast gdybym miał liczbę 0,30 po pomnożeniu otrzymam liczbę 30. Jeśli liczba sekund przykładowo wynosiłaby 125 to po połączeniu z mikrosekundami otrzymam liczby: 1253 i 12530 co oczywiście nie jest prawidłowe. Niby mógłbym wykrywać czy liczba jest mniejsza od 10 i dodawać wiodące 0, jednak gdybym mnożył przez 1000 i więcej sprawa byłaby bardziej skomplikowana, jak to rozwiązać, pracować na ciągach?
sobstel
wystarczy microtime z parametrem true. zwraca wtedy floata. np.

  1. <?php
  2. $result = microtime(true);
  3. ?>
Mistrig
Faktycznie, spojrzałem do angielskiej wersji manuala i istnieje taka możliwość (polska wersja jest nieaktualna). Co do drugiej części problemu to wystarczy ciąg w postaci float pomnożyć przez 100, co pozwoli uniknąć wymienionych w moim poprzednim poście problemów.
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.