Start · Sprachen · PHP · Referenz · gettimeofday

gettimeofday

Funktion

Ermittelt die aktuelle Zeit als assoziatives Array oder als Gleitkommazahl (Mikrosekunden-Präzision).

seit PHP 4.0.0 Kategorie: date

Signatur

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

Beschreibung

gettimeofday() gibt die aktuelle Systemzeit zurück. Standardmäßig liefert die Funktion ein assoziatives Array mit vier Schlüsseln: sec (Sekunden seit dem Unix-Epoch), usec (Mikrosekunden), minuteswest (Minuten westlich von Greenwich) und dsttime (DST-Korrekturtyp).

Wird der Parameter as_float auf true gesetzt, gibt die Funktion stattdessen einen einzelnen float-Wert zurück, der Sekunden und Mikrosekunden als Dezimalanteil kombiniert – ähnlich wie microtime(true). Diese Form ist besonders praktisch für einfache Zeitmessungen und Performance-Benchmarks.

Im Gegensatz zu time() bietet gettimeofday() Sub-Sekunden-Präzision, was sie für Anwendungen nützlich macht, bei denen eine höhere zeitliche Auflösung benötigt wird, etwa für Logging mit feiner Granularität oder Profiling.

Zu beachten ist, dass die Felder minuteswest und dsttime plattformabhängig sein können und auf manchen Systemen immer 0 zurückliefern. Für Zeitzonenverwaltung sollte daher besser die DateTimeZone-Klasse genutzt werden.

Parameter

Name Typ Default Beschreibung
$as_float bool false Wenn true, wird ein einzelner float-Wert (Sekunden mit Mikrosekunden als Nachkommastellen) zurückgegeben statt eines Arrays.

Rückgabewert

Typ
array|float
Beschreibung
Ohne Parameter (oder as_float = false): assoziatives Array mit den Schlüsseln sec, usec, minuteswest und dsttime. Mit as_float = true: ein float-Wert mit Sekunden und Mikrosekunden als Dezimalanteil.

Beispiele

Aktuelle Zeit als Array ausgeben

<?php
$time = gettimeofday();
echo 'Sekunden seit Epoch : ' . $time['sec'] . PHP_EOL;
echo 'Mikrosekunden        : ' . $time['usec'] . PHP_EOL;
echo 'Minuten west GMT     : ' . $time['minuteswest'] . PHP_EOL;
echo 'DST-Korrekturtyp     : ' . $time['dsttime'] . PHP_EOL;
Sekunden seit Epoch : 1713600000 Mikrosekunden : 123456 Minuten west GMT : -60 DST-Korrekturtyp : 0

Einfaches Performance-Benchmarking mit as_float

<?php
$start = gettimeofday(true);

// Zu messende Operation
$sum = 0;
for ($i = 0; $i < 1_000_000; $i++) {
    $sum += $i;
}

$end = gettimeofday(true);
$elapsed = $end - $start;

printf('Ergebnis: %d | Dauer: %.6f Sekunden%s', $sum, $elapsed, PHP_EOL);
Ergebnis: 499999500000 | Dauer: 0.023451 Sekunden

Feines Logging mit Mikrosekunden-Zeitstempel

<?php
function logMitZeit(string $nachricht): void {
    $t = gettimeofday();
    $zeitstempel = sprintf('%d.%06d', $t['sec'], $t['usec']);
    echo "[{$zeitstempel}] {$nachricht}" . PHP_EOL;
}

logMitZeit('Anfrage empfangen');
usleep(5000);
logMitZeit('Verarbeitung abgeschlossen');
[1713600000.123456] Anfrage empfangen [1713600000.128734] Verarbeitung abgeschlossen

// Wichtig · Fallstricke

Die Felder minuteswest und dsttime stammen aus dem POSIX-Systemaufruf gettimeofday(2) und sind auf vielen modernen Systemen (insbesondere Windows) veraltet oder immer 0. Sie sollten nicht für Zeitzonenberechnungen verwendet werden.

Für Benchmarking-Zwecke ist microtime(true) eine gängige Alternative zu gettimeofday(true) und liefert dieselbe Präzision. Die Wahl zwischen beiden ist in der Praxis eine Frage des persönlichen Stils.

Die zurückgegebene Zeit ist von der Systemuhr abhängig und kann durch NTP-Anpassungen springen. Für monotone Zeitmessungen (die nie rückwärts laufen) ist in performance-kritischen Szenarien hrtime() vorzuziehen.