W3docs

gettimeofday()

Scopri la funzione PHP gettimeofday(): sintassi, valori restituiti, il parametro as_float, la rimozione in PHP 8.0 e come sostituirla con microtime(true).

La funzione PHP gettimeofday()

La funzione gettimeofday() restituisce l'ora di sistema corrente. Per impostazione predefinita restituisce un array associativo con i secondi e i microsecondi trascorsi dall'epoca Unix più i dettagli sul fuso orario. Con il suo argomento opzionale impostato su true, restituisce il tempo come un singolo float.

Importante: gettimeofday() è stata rimossa in PHP 8.0.0. Se stai scrivendo o mantenendo codice PHP moderno, usa microtime(true) per timestamp ad alta precisione. Questo capitolo spiega la funzione legacy e mostra la sostituzione raccomandata per migrare il codice più vecchio con sicurezza.

Questa pagina copre la sintassi, il parametro opzionale, il valore restituito esatto, esempi eseguibili e cosa usare al suo posto.

Sintassi

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

Parametri

ParametroTipoDescrizione
$as_floatboolOpzionale. Quando true, restituisce un singolo float (secondi con microsecondi). Se omesso o false, restituisce un array associativo. Valore predefinito: false.

Valore restituito

Quando $as_float è false (impostazione predefinita), gettimeofday() restituisce un array associativo con le seguenti chiavi:

  • sec — secondi trascorsi dall'epoca Unix (int).
  • usec — microsecondi nel secondo corrente (int).
  • minuteswest — minuti a ovest di Greenwich (int).
  • dsttime — tipo di correzione dell'ora legale (int).

Quando $as_float è true, restituisce un singolo float: il numero di secondi trascorsi dall'epoca, con i microsecondi espressi come parte frazionaria.

Esempio: la forma array predefinita

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

Un risultato tipico è simile a questo (i numeri dipendono dal momento in cui viene eseguito):

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

Esempio: la forma float

Passare true restituisce un unico valore utilizzabile direttamente nei calcoli — utile per misurare il tempo trascorso:

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

Sostituzione raccomandata: microtime(true)

Poiché gettimeofday() non esiste più in PHP 8.0+, il modo portabile per ottenere un timestamp ad alta precisione è microtime(true), che restituisce lo stesso tipo di float:

<?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";

Se hai specificamente bisogno della suddivisione secondi/microsecondi che forniva il vecchio array, puoi ricostruirla da microtime(true):

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

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

Quando si usa questa funzione?

Incontrerai gettimeofday() principalmente leggendo o aggiornando codice legacy scritto per PHP 5 o 7. I suoi utilizzi reali erano:

  • Timing ad alta precisione e profiling (quanto tempo impiega un blocco di codice o una query al database).
  • Generazione di timestamp con risoluzione inferiore al secondo per i log.

Per tutti questi casi, il codice PHP moderno dovrebbe usare microtime(true). Per timestamp interi dove i microsecondi non sono rilevanti, time() è più semplice, e getdate() restituisce un array etichettato di componenti della data. Per formattare uno qualsiasi di questi in una stringa leggibile, consulta la funzione date().

Considerazioni sulle prestazioni

gettimeofday() è una chiamata di sistema, quindi ha un piccolo overhead. Ancora più importante, chiamarla in PHP 8.0+ genera un Error perché la funzione è stata rimossa. microtime(true) è supportata in tutte le versioni correnti di PHP, è leggera e restituisce un float pronto per i calcoli — rendendola la scelta corretta per il nuovo codice.

Conclusione

gettimeofday() restituiva l'ora corrente come array associativo (sec, usec, minuteswest, dsttime) oppure, con $as_float impostato su true, come un singolo float. È stata rimossa in PHP 8.0.0, quindi per timestamp precisi al microsecondo e profiling in PHP moderno, usa microtime(true).

Pratica

Pratica
Cosa restituisce gettimeofday() quando il suo argomento opzionale viene omesso?
Cosa restituisce gettimeofday() quando il suo argomento opzionale viene omesso?
Was this page helpful?