Start · Sprachen · PHP · Referenz · microtime

microtime

Funktion

Gibt den aktuellen Unix-Zeitstempel mit Mikrosekunden zurück – entweder als <code>float</code> oder als formatierten <code>string</code>.

seit PHP 4.0.0 Kategorie: date

Signatur

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

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

Typ
string|float
Beschreibung
Bei 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);
Ausführungszeit: 0.0312 Sekunden

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;
Aktueller Zeitstempel: 1718123456.789012 Als String: 0.789012 1718123456

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);
Abfrage dauerte: 50.12 ms

// 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.