microtime / hrtime în PHP

Dată și oră PHP 4+ (hrtime: PHP 7.3+)

Returnează momentul curent cu precizie de microsecunde. Este folosită pentru măsurarea duratei unui cod.

Sintaxă
microtime(bool $as_float = false): string|float

Ce face microtime / hrtime

microtime(true) returnează timestamp-ul curent ca număr zecimal, cu microsecunde după virgulă. Diferența dintre două apeluri îți spune cât a durat o bucată de cod, în secunde.

Fără true, rezultatul este un text de forma "0.33947000 1792407462" (microsecundele, apoi secundele), greu de folosit în calcule. Aproape mereu vrei varianta cu true.

Pentru măsurători foarte precise există hrtime(true), care returnează nanosecunde de la un moment arbitrar (de obicei pornirea calculatorului). Nu poate fi transformată în dată, dar nu este afectată de schimbarea ceasului sistemului.

Parametri

Parametru Descriere
$as_float Opțional. true pentru un număr zecimal de secunde, false pentru textul în două părți.

Ce returnează

Un număr zecimal (cu true) sau un text "microsecunde secunde". hrtime(true) returnează un întreg în nanosecunde, iar hrtime() un tablou [secunde, nanosecunde].

Exemple

Exemplul 1: Cele două forme ale rezultatului

<?php
var_dump(microtime());
var_dump(microtime(true));

Rezultat posibil (diferă la fiecare rulare)

string(21) "0.33947000 1792407462"
float(1792407462.339472)

Exemplul 2: Cât durează un cod

<?php
$start = microtime(true);

$suma = 0;
for ($i = 0; $i < 1_000_000; $i++) {
    $suma += $i;
}

$durata = microtime(true) - $start;
printf("Gata în %.4f secunde", $durata);

Rezultat posibil (diferă la fiecare rulare)

Gata în 0.0071 secunde

Exemplul 3: Măsurare precisă cu hrtime

Împarte la 1.000.000 ca să transformi nanosecundele în milisecunde.

<?php
$start = hrtime(true);
usleep(25000); // o pauză de 25 ms
$ns = hrtime(true) - $start;

echo "Pauza a durat " . round($ns / 1e6, 2) . " ms";

Rezultat posibil (diferă la fiecare rulare)

Pauza a durat 25.14 ms

Greșeli frecvente

  • Scazi două rezultate ale lui microtime() fără true. Scazi texte, nu numere, și rezultatul este greșit sau dă eroare.
  • Folosești microtime ca să generezi identificatori unici sau token-uri. Valorile sunt previzibile. Folosește random_bytes sau random_int.

Comenzi înrudite

  • time: Returnează momentul curent ca număr de secunde de la 1 ianuarie 1970 (timestamp Unix).
  • uniqid: Generează un identificator bazat pe ora curentă, în microsecunde. Unic în practică, dar previzibil.
  • date: Afișează data și ora într-un anumit format.