W3docs

gettimeofday()

PHP gettimeofday(): Syntax, Rückgabewerte, as_float-Parameter, Entfernung in PHP 8.0 und Ersatz durch microtime(true).

Die PHP-Funktion gettimeofday()

Die Funktion gettimeofday() gibt die aktuelle Systemzeit zurück. Standardmäßig liefert sie ein assoziatives Array mit den Sekunden und Mikrosekunden seit der Unix-Epoche sowie Zeitzonendetails. Wenn das optionale Argument auf true gesetzt wird, gibt die Funktion die Zeit stattdessen als einzelnen float-Wert zurück.

Wichtig: gettimeofday() wurde in PHP 8.0.0 entfernt. Wenn Sie modernen PHP-Code schreiben oder pflegen, verwenden Sie microtime(true) für hochpräzise Zeitstempel. Dieses Kapitel erklärt die veraltete Funktion und zeigt den empfohlenen Ersatz, damit Sie älteren Code sicher migrieren können.

Diese Seite behandelt die Syntax, den optionalen Parameter, den genauen Rückgabewert, ausführbare Beispiele und was stattdessen verwendet werden sollte.

Syntax

gettimeofday(bool $as_float = false): array|float

Parameter

ParameterTypBeschreibung
$as_floatboolOptional. Bei true wird ein einzelner float-Wert zurückgegeben (Sekunden mit Mikrosekunden). Wenn weggelassen oder false, wird ein assoziatives Array zurückgegeben. Standardwert ist false.

Rückgabewert

Wenn $as_float den Wert false hat (Standard), gibt gettimeofday() ein assoziatives Array mit folgenden Schlüsseln zurück:

  • sec — Sekunden seit der Unix-Epoche (int).
  • usec — Mikrosekunden innerhalb der aktuellen Sekunde (int).
  • minuteswest — Minuten westlich von Greenwich (int).
  • dsttime — Art der Sommerzeit-Korrektur (int).

Wenn $as_float den Wert true hat, wird ein einzelner float-Wert zurückgegeben: die Anzahl der Sekunden seit der Epoche, wobei die Mikrosekunden als Nachkommateil ausgedrückt werden.

Beispiel: die Standard-Array-Form

<?php
$now = gettimeofday();
print_r($now);

Ein typisches Ergebnis sieht folgendermaßen aus (die Zahlen hängen vom Ausführungszeitpunkt ab):

Array
(
    [sec] => 1718928000
    [usec] => 512340
    [minuteswest] => 0
    [dsttime] => 0
)

Beispiel: die Float-Form

Das Übergeben von true liefert einen einzelnen Wert, der direkt in Berechnungen verwendet werden kann — praktisch zum Messen vergangener Zeit:

<?php
$float = gettimeofday(true);
echo $float; // e.g. 1718928000.51234

Empfohlener Ersatz: microtime(true)

Da gettimeofday() in PHP 8.0+ nicht mehr existiert, ist der portable Weg, einen hochpräzisen Zeitstempel zu erhalten, microtime(true), das denselben float-Typ zurückgibt:

<?php
$start = microtime(true);

// ... code you want to time ...
for ($i = 0; $i < 1_000_000; $i++) {
    // busy work
}

$elapsed = microtime(true) - $start;
echo "Elapsed: " . round($elapsed, 6) . " seconds";

Wenn Sie speziell die Sekunden/Mikrosekunden-Aufteilung benötigen, die das alte Array lieferte, können Sie diese aus microtime(true) rekonstruieren:

<?php
$t = microtime(true);
$sec = (int) $t;
$usec = (int) round(($t - $sec) * 1_000_000);

echo "sec={$sec}, usec={$usec}";

Wann würde ich das verwenden?

gettimeofday() begegnet Ihnen hauptsächlich beim Lesen oder Aktualisieren von Legacy-Code, der für PHP 5 oder 7 geschrieben wurde. Die realen Anwendungsfälle waren:

  • Hochpräzises Timing und Profiling (wie lange ein Codeblock oder eine Datenbankabfrage dauert).
  • Generierung von Zeitstempeln mit Sub-Sekunden-Auflösung für Logs.

Für all diese Zwecke sollte moderner PHP-Code microtime(true) verwenden. Für ganzzahlige Zeitstempel, bei denen Mikrosekunden keine Rolle spielen, ist time() einfacher, und getdate() gibt ein beschriftetes Array mit Datumsteilen zurück. Um diese in einen lesbaren String zu formatieren, lesen Sie die Dokumentation zur Funktion date().

Überlegungen zur Performance

gettimeofday() ist ein Systemaufruf und hat daher einen kleinen Overhead. Noch wichtiger ist, dass der Aufruf in PHP 8.0+ einen Error auslöst, weil die Funktion entfernt wurde. microtime(true) wird von allen aktuellen PHP-Versionen unterstützt, ist leichtgewichtig und gibt einen float zurück, der direkt für Berechnungen geeignet ist — was es zur richtigen Wahl für neuen Code macht.

Fazit

gettimeofday() gab die aktuelle Zeit entweder als assoziatives Array (sec, usec, minuteswest, dsttime) oder, wenn $as_float auf true gesetzt war, als einzelnen float zurück. Die Funktion wurde in PHP 8.0.0 entfernt, daher sollten Sie für genaue Mikrosekunden-Zeitstempel und Profiling in modernem PHP stattdessen microtime(true) verwenden.

Übung

Übung
Was gibt gettimeofday() zurück, wenn das optionale Argument weggelassen wird?
Was gibt gettimeofday() zurück, wenn das optionale Argument weggelassen wird?
Was this page helpful?