W3docs

gettimeofday()

Aprende la función PHP gettimeofday(): sintaxis, valores de retorno, el parámetro as_float, su eliminación en PHP 8.0 y cómo reemplazarla con microtime(true).

La función PHP gettimeofday()

La función gettimeofday() devuelve la hora actual del sistema. Por defecto, retorna un array asociativo con los segundos y microsegundos desde el epoch de Unix más los detalles de zona horaria. Con su argumento opcional establecido en true, devuelve el tiempo como un único float en su lugar.

Importante: gettimeofday() fue eliminada en PHP 8.0.0. Si estás escribiendo o manteniendo PHP moderno, usa microtime(true) para marcas de tiempo de alta precisión. Este capítulo explica la función heredada y muestra el reemplazo recomendado para que puedas migrar código antiguo con confianza.

Esta página cubre la sintaxis, el parámetro opcional, el valor de retorno exacto, ejemplos ejecutables y qué usar en su lugar.

Sintaxis

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

Parámetros

ParámetroTipoDescripción
$as_floatboolOpcional. Cuando es true, devuelve un único float (segundos con microsegundos). Cuando se omite o es false, devuelve un array asociativo. Por defecto es false.

Valor de retorno

Cuando $as_float es false (el valor por defecto), gettimeofday() devuelve un array asociativo con estas claves:

  • sec — segundos desde el epoch de Unix (int).
  • usec — microsegundos dentro del segundo actual (int).
  • minuteswest — minutos al oeste de Greenwich (int).
  • dsttime — tipo de corrección de horario de verano (int).

Cuando $as_float es true, devuelve un único float: el número de segundos desde el epoch, con los microsegundos expresados como la parte fraccionaria.

Ejemplo: la forma de array por defecto

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

Un resultado típico tiene este aspecto (los números dependen del momento en que lo ejecutes):

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

Ejemplo: la forma float

Pasar true devuelve un único valor que puedes usar directamente en aritmética — útil para medir el tiempo transcurrido:

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

Reemplazo recomendado: microtime(true)

Dado que gettimeofday() ya no existe en PHP 8.0+, la forma portable de obtener una marca de tiempo de alta precisión es microtime(true), que devuelve el mismo 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";

Si necesitas específicamente la división entre segundos y microsegundos que daba el antiguo array, puedes reconstruirla 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}";

¿Cuándo usaría esto?

Encontrarás gettimeofday() principalmente al leer o actualizar código heredado escrito para PHP 5 o 7. Sus usos en el mundo real fueron:

  • Temporización de alta precisión y perfilado (cuánto tarda un bloque de código o una consulta de base de datos).
  • Generación de marcas de tiempo con resolución sub-segundo para registros.

Para todos estos casos, el código PHP moderno debería usar microtime(true). Para marcas de tiempo de segundos enteros donde los microsegundos no importan, time() es más sencillo, y getdate() devuelve un array etiquetado de partes de fecha. Para formatear cualquiera de estos en una cadena legible por humanos, consulta la función date().

Consideraciones de rendimiento

gettimeofday() es una llamada al sistema, por lo que tiene una pequeña sobrecarga. Más importante aún, llamarla en PHP 8.0+ genera un Error porque la función fue eliminada. microtime(true) es compatible con todas las versiones actuales de PHP, es ligera y devuelve un float listo para aritmética — lo que la convierte en la elección correcta para código nuevo.

Conclusión

gettimeofday() devolvía la hora actual ya sea como un array asociativo (sec, usec, minuteswest, dsttime) o, con $as_float establecido en true, como un único float. Fue eliminada en PHP 8.0.0, por lo que para marcas de tiempo de microsegundos precisas y perfilado en PHP moderno, usa microtime(true) en su lugar.

Práctica

Práctica
¿Qué devuelve gettimeofday() cuando se omite su argumento opcional?
¿Qué devuelve gettimeofday() cuando se omite su argumento opcional?
Was this page helpful?