Получение точного времени в PHP - PullRequest
2 голосов
/ 23 октября 2008

Я заметил, что независимо от времени выполнения данного скрипта каждый вызов date () будет возвращать одну и ту же метку времени независимо от того, где функция вызывается в скрипте. Похоже, он просто возвращает время, когда скрипт впервые начал выполняться.

Для целей ведения журнала было бы чрезвычайно полезно иметь возможность получать дополнительные временные метки из скрипта. Это возможно? Есть ли способ сделать это относительно легким?

Редактировать: Будет ли пример для функции microtime () предположить, что это может быть сделано. Кто-нибудь может подтвердить?

Обновление: Функция microtime () работает, но я не могу отформатировать ее с помощью функции date (), потому что date () принимает отметки времени только как целые числа (поэтому без микросекунд). Как я могу получить правильно отформатированную дату из значения, возвращаемого функцией microtime ()?

Ответы [ 4 ]

3 голосов
/ 23 октября 2008

Прежде всего, date () используется для форматирования метки времени - это просто поведение по умолчанию, при котором используется текущая метка времени, когда date() вызывается без второго параметра. Используемая временная метка будет временной меткой в ​​момент вызова функции - вызов date('Y-m-d') аналогичен вызову date('Y-m-d', time()), где time () даст вам

[...] текущее время, измеренное в количество секунд с начала эпохи Unix (1 января 1970 г. 00:00:00 по Гринвичу).

Вы получаете одну и ту же метку времени каждый раз, когда вызываете date(), поскольку ваш сценарий слишком быстрый и выполняется в течение одной секунды, что не приводит к изменению метки времени.

Чтобы решить вашу вторую проблему форматирования возвращаемого значения microtime () , вы можете сделать следующее (не проверено)

function formatTime($microtime, $format)
{
    list($timestamp, $fraction) = explode('.', $microtime);
    return date($format, (int)$timestamp) . '.' . $fraction;
}

Значение, данное $microtime, должно быть float, которое вы получите, передавая true в качестве параметра microtime()

3 голосов
/ 23 октября 2008

Я запустил этот код на моей машине:

<?php
$time_start = time();

sleep(2);

$time_end = time();

print 'Start: ' . date("m/d/Y @ g:i:sA", $time_start) . '<br>';
print 'End: ' . date("m/d/Y @ g:i:sA", $time_end);
?>

И это вывод:

Start: 10/23/2008 @ 3:12:23PM
End: 10/23/2008 @ 3:12:25PM

Приводит меня к мысли, что time() не просто возвращает время начала выполнения.

1 голос
/ 23 октября 2008

http://us.php.net/microtime дает мне разное время в одном и том же сценарии.

0 голосов
/ 23 октября 2008

Вы можете использовать пакет Pear Benchmarking для получения информации о времени и профилировании.

...