Signatur
Beschreibung
microtime() ermittelt die aktuelle Zeit mit Mikrosekundengenauigkeit und eignet sich besonders zur Messung von Ausführungszeiten (Profiling) sowie für hochauflösende Zeitstempel. Im Gegensatz zu time(), das nur ganze Sekunden liefert, erlaubt microtime() die Zeitmessung im Bereich von Millionstel Sekunden.
Wird $as_float auf true gesetzt, gibt die Funktion einen float zurück, der die Sekunden seit dem Unix-Epoch (01.01.1970 00:00:00 UTC) inklusive des Mikrosekundenanteils als Dezimalstelle enthält. Dies ist die in der Praxis am häufigsten verwendete Form, da damit direkte arithmetische Operationen möglich sind.
Ohne Argument (oder mit false) gibt microtime() einen string im Format "msec sec" zurück, wobei msec der Mikrosekundenanteil als Dezimalbruch (z. B. 0.123456) und sec die ganzen Unix-Sekunden sind. Dieses Format ist historisch bedingt und heute kaum noch nötig.
Für präzise Zeitmessungen empfiehlt sich alternativ hrtime(), da es auf einer monotonen Uhr basiert und nicht von Systemuhranpassungen (z. B. NTP) beeinflusst wird. microtime() hingegen ist direkt mit dem Unix-Timestamp verknüpft und daher für absolute Zeitstempel geeignet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $as_float | bool | false | Wenn true, wird ein float zurückgegeben (Sekunden mit Mikrosekundenanteil). Bei false (Standard) wird ein string im Format "msec sec" geliefert. |
Rückgabewert
as_float = true: ein float mit dem aktuellen Zeitstempel inklusive Mikrosekundenanteil (z. B. 1718123456.789012). Bei as_float = false: ein string der Form "0.789012 1718123456".Beispiele
Ausführungszeit einer Operation messen
<?php
$start = microtime(true);
// Simulierte Aufgabe
$sum = 0;
for ($i = 0; $i < 1_000_000; $i++) {
$sum += $i;
}
$end = microtime(true);
$elapsed = $end - $start;
printf("Ausführungszeit: %.4f Sekunden\n", $elapsed);
Einfachen hochauflösenden Zeitstempel erzeugen
<?php
// Als Float – praktisch für Datenbankeinträge oder Logs
$timestamp = microtime(true);
echo 'Aktueller Zeitstempel: ' . $timestamp . PHP_EOL;
// Als String – historisches Format (kaum noch verwendet)
$timestampStr = microtime();
echo 'Als String: ' . $timestampStr . PHP_EOL;
Einfaches Benchmarking einer Datenbankabfrage
<?php
function benchmark(callable $fn): float {
$start = microtime(true);
$fn();
return microtime(true) - $start;
}
$dauer = benchmark(function () {
// Datenbankabfrage oder aufwändige Berechnung simulieren
usleep(50_000); // 50 ms warten
});
printf("Abfrage dauerte: %.2f ms\n", $dauer * 1000);
// Wichtig · Fallstricke
Genauigkeit: Die tatsächliche Auflösung hängt vom Betriebssystem ab. Unter Linux ist die Mikrosekundengenauigkeit in der Regel zuverlässig, unter Windows kann sie schlechter sein.
Nicht monoton: microtime() basiert auf der Systemuhr, die durch NTP-Synchronisierung oder manuelle Anpassungen rückwärts springen kann. Für rein relative Zeitmessungen (Profiling) ist hrtime(true) die sicherere Alternative, da diese Uhr nie zurückspringt.
Float-Präzision: Als float können bei sehr großen Zeitstempeln Genauigkeitsverluste durch die begrenzte Darstellungsgenauigkeit von 64-Bit-Gleitkommazahlen auftreten. Für Nanosekunden-Präzision ist hrtime() vorzuziehen.