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, usamicrotime(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|floatParametri
| Parametro | Tipo | Descrizione |
|---|---|---|
$as_float | bool | Opzionale. 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.51234Sostituzione 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).