gettimeofday()
Aprenda a função PHP gettimeofday(): sintaxe, valores de retorno, o parâmetro as_float, remoção no PHP 8.0 e como substituí-la por microtime(true).
A Função PHP gettimeofday()
A função gettimeofday() retorna a hora atual do sistema. Por padrão, ela retorna um array associativo com os segundos e microssegundos desde a época Unix mais detalhes do fuso horário. Com seu argumento opcional definido como true, ela retorna o tempo como um único float.
Importante:
gettimeofday()foi removida no PHP 8.0.0. Se você está escrevendo ou mantendo PHP moderno, usemicrotime(true)para timestamps de alta precisão. Este capítulo explica a função legada e mostra a substituição recomendada para que você possa migrar código antigo com segurança.
Esta página aborda a sintaxe, o parâmetro opcional, o valor de retorno exato, exemplos executáveis e o que usar em seu lugar.
Sintaxe
gettimeofday(bool $as_float = false): array|floatParâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
$as_float | bool | Opcional. Quando true, retorna um único float (segundos com microssegundos). Quando omitido ou false, retorna um array associativo. O padrão é false. |
Valor de Retorno
Quando $as_float é false (o padrão), gettimeofday() retorna um array associativo com estas chaves:
sec— segundos desde a época Unix (int).usec— microssegundos dentro do segundo atual (int).minuteswest— minutos a oeste de Greenwich (int).dsttime— tipo de correção de horário de verão (int).
Quando $as_float é true, ela retorna um único float: o número de segundos desde a época, com os microssegundos expressos como parte fracionária.
Exemplo: a forma de array padrão
<?php
$now = gettimeofday();
print_r($now);Um resultado típico é semelhante a este (os números dependem do momento em que você o executa):
Array
(
[sec] => 1718928000
[usec] => 512340
[minuteswest] => 0
[dsttime] => 0
)Exemplo: a forma float
Passar true retorna um único valor que você pode usar diretamente em operações aritméticas — útil para medir o tempo decorrido:
<?php
$float = gettimeofday(true);
echo $float; // e.g. 1718928000.51234Substituição recomendada: microtime(true)
Como gettimeofday() não existe mais no PHP 8.0+, a forma portável de obter um timestamp de alta precisão é microtime(true), que retorna o mesmo tipo de 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 você precisar especificamente da divisão segundos/microssegundos que o array antigo fornecia, pode reconstruí-la a partir de microtime(true):
<?php
$t = microtime(true);
$sec = (int) $t;
$usec = (int) round(($t - $sec) * 1_000_000);
echo "sec={$sec}, usec={$usec}";Quando eu usaria isso?
Você encontrará gettimeofday() principalmente ao ler ou atualizar código legado escrito para PHP 5 ou 7. Seus usos reais eram:
- Temporização de alta precisão e profiling (quanto tempo leva um bloco de código ou uma consulta ao banco de dados).
- Geração de timestamps com resolução de sub-segundo para logs.
Para todos esses casos, o código PHP moderno deve usar microtime(true). Para timestamps de segundos inteiros onde os microssegundos não importam, time() é mais simples, e getdate() retorna um array rotulado com partes da data. Para formatar qualquer um deles em uma string legível por humanos, consulte a função date().
Considerações de Desempenho
gettimeofday() é uma chamada de sistema, portanto tem uma pequena sobrecarga. Mais importante ainda, chamá-la no PHP 8.0+ gera um Error porque a função foi removida. microtime(true) é suportada em todas as versões atuais do PHP, é leve e retorna um float pronto para operações aritméticas — tornando-a a escolha correta para novo código.
Conclusão
gettimeofday() retornava a hora atual como um array associativo (sec, usec, minuteswest, dsttime) ou, com $as_float definido como true, como um único float. Ela foi removida no PHP 8.0.0, portanto, para timestamps de microssegundos precisos e profiling em PHP moderno, use microtime(true).