W3docs

gettimeofday()

Функция PHP gettimeofday(): синтаксис, возвращаемые значения, параметр as_float, удаление в PHP 8.0 и замена на microtime(true).

Функция PHP gettimeofday()

Функция gettimeofday() возвращает текущее системное время. По умолчанию она возвращает ассоциативный массив с секундами и микросекундами, прошедшими с эпохи Unix, а также данными о часовом поясе. Если необязательный аргумент установлен в true, функция возвращает время в виде единственного значения типа float.

Важно: gettimeofday() была удалена в PHP 8.0.0. Если вы пишете или поддерживаете современный PHP-код, используйте microtime(true) для получения высокоточных временных меток. В этой главе описывается устаревшая функция и показана рекомендуемая замена, чтобы вы могли уверенно перенести старый код.

На этой странице рассматриваются синтаксис, необязательный параметр, точное возвращаемое значение, рабочие примеры и рекомендации по замене функции.

Синтаксис

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

Параметры

ПараметрТипОписание
$as_floatboolНеобязательный. При значении true возвращает единственное значение float (секунды с микросекундами). Если опущен или равен false, возвращает ассоциативный массив. По умолчанию false.

Возвращаемое значение

Когда $as_float равен false (по умолчанию), gettimeofday() возвращает ассоциативный массив со следующими ключами:

  • sec — секунды с начала эпохи Unix (int).
  • usec — микросекунды в рамках текущей секунды (int).
  • minuteswest — количество минут к западу от Гринвича (int).
  • dsttime — тип коррекции летнего времени (int).

Когда $as_float равен true, возвращается единственное значение float: количество секунд с начала эпохи, где микросекунды выражены как дробная часть.

Пример: стандартный вид массива

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

Типичный результат выглядит так (числа зависят от момента запуска):

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

Пример: вид float

Передача true возвращает одно значение, которое можно сразу использовать в арифметических операциях — удобно для измерения прошедшего времени:

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

Рекомендуемая замена: microtime(true)

Поскольку gettimeofday() больше не существует в PHP 8.0+, переносимым способом получения высокоточной временной метки является microtime(true), которая возвращает аналогичное значение типа 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";

Если вам конкретно нужно разделение на секунды и микросекунды, которое давал старый массив, вы можете воссоздать его из microtime(true):

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

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

Когда это может пригодиться?

Вы будете встречать gettimeofday() в основном при чтении или обновлении устаревшего кода, написанного для PHP 5 или 7. В реальных проектах она использовалась для:

  • Высокоточного измерения времени и профилирования (сколько времени занимает блок кода или запрос к базе данных).
  • Создания временных меток с субсекундным разрешением для логов.

Для всех этих задач современный PHP-код должен использовать microtime(true). Для целых секунд, когда микросекунды не важны, time() проще, а getdate() возвращает именованный массив частей даты. Чтобы отформатировать любое из этих значений в удобочитаемую строку, смотрите функцию date().

Производительность

gettimeofday() является системным вызовом, поэтому имеет небольшие накладные расходы. Что важнее, вызов этой функции в PHP 8.0+ вызывает ошибку Error, поскольку функция была удалена. microtime(true) поддерживается во всех актуальных версиях PHP, является легковесной и возвращает значение float, готовое к арифметическим операциям — что делает её правильным выбором для нового кода.

Заключение

gettimeofday() возвращала текущее время либо в виде ассоциативного массива (sec, usec, minuteswest, dsttime), либо — при значении $as_float равном true — в виде единственного float. Функция была удалена в PHP 8.0.0, поэтому для точных временных меток с микросекундами и профилирования в современном PHP используйте microtime(true).

Практика

Практика
Что возвращает gettimeofday(), если её необязательный аргумент опущен?
Что возвращает gettimeofday(), если её необязательный аргумент опущен?
Was this page helpful?