Как получить текущее время в миллисекундах в PHP?
Использование microtime() для получения миллисекунд
В PHP нет встроенной функции, которая возвращает timestamp в миллисекундах напрямую, но вы можете легко получить его с помощью microtime(). Эта функция возвращает текущую метку времени с микросекундами.
Существует два способа её использования:
microtime()— возвращает строку вида "0.12345678 1700000000" (микросекунды и секунды через пробел);microtime(true)— возвращает число с плавающей точкой (float), где целая часть — это секунды, а дробная — микросекунды.
Чтобы получить время в миллисекундах, нужно умножить результат microtime(true) на 1000 и округлить до целого числа:
<?php
// Получаем текущее время в миллисекундах
$milliseconds = round(microtime(true) * 1000);
echo "Текущее время в миллисекундах: $milliseconds\n";
// Пример: 1700000123456
?>
Замер времени выполнения скрипта
Для измерения времени выполнения участка кода используйте разницу между двумя вызовами microtime(true):
<?php
$start = microtime(true);
// Ваш код, который нужно замерить
for ($i = 0; $i < 100000; $i++) {
// какая-то операция
$arr[] = sqrt($i);
}
$end = microtime(true);
$executionTime = $end - $start;
// Вывод в секундах с точностью до миллисекунд
echo "Время выполнения: " . round($executionTime, 4) . " секунд\n";
// Вывод в миллисекундах
echo "Время выполнения: " . round($executionTime * 1000, 2) . " мс\n";
?>
Форматирование времени для логов
Если вам нужно получить текущее время с миллисекундами в читаемом формате (например, для логов), используйте комбинацию DateTime и microtime():
<?php
function getCurrentTimeWithMilliseconds(): string {
$micro = sprintf("%03d", (microtime(true) - floor(microtime(true))) * 1000);
$now = new DateTime();
return $now->format('Y-m-d H:i:s') . '.' . $micro;
}
echo getCurrentTimeWithMilliseconds(); // 2025-03-15 14:30:45.123
?>
Полезные советы
- Для высокоточных замеров (менее 1 мс) используйте
hrtime()(PHP 7.3+), которая возвращает время в наносекундах; - Не используйте
time()для замеров — его точность 1 секунда; - При замерах учитывайте, что на результат влияет загрузка процессора и другие процессы;
- Если нужно много раз получать время, сохраните
microtime(true)в переменную, чтобы избежать повторных вызовов.
Вот полный пример скрипта для замера:
<?php
$start = microtime(true);
// Имитация работы
usleep(50000); // 50 миллисекунд
$end = microtime(true);
$seconds = $end - $start;
$milliseconds = $seconds * 1000;
echo "Секунды: " . round($seconds, 6) . "\n";
echo "Миллисекунды: " . round($milliseconds, 2) . "\n";
?>
Этот подход даёт точность до микросекунд и идеально подходит для большинства задач профилирования и логирования.
<<Альтернативный подход: использование hrtime() для максимальной точности
Если вам нужна максимальная точность (наносекунды), используйте функцию hrtime(), доступную с PHP 7.3. Она возвращает время в наносекундах и не зависит от системных часов, что делает её идеальной для бенчмарков:
<?php
$start = hrtime(true);
// Ваш код
for ($i = 0; $i < 100000; $i++) {
// операция
}
$end = hrtime(true);
$nanoseconds = $end - $start;
$milliseconds = $nanoseconds / 1e6;
echo "Время выполнения: " . round($milliseconds, 2) . " мс\n";
echo "Наносекунды: $nanoseconds\n";
?>
Когда что использовать:
microtime(true)— для общего логирования и замеров с точностью до микросекунд;hrtime(true)— для высокоточных бенчмарков и профилирования;time()— только для меток времени с точностью до секунды.
Также можно создать вспомогательную функцию для получения времени в миллисекундах:
<?php
function currentTimeMillis(): int {
return (int) round(microtime(true) * 1000);
}
?>
Этот подход удобен, если вам часто нужно получать timestamp в миллисекундах для API или UUID.