Я заметил, что независимо от времени выполнения данного сценария каждый вызов date () будет возвращать одну и ту же метку времени независимо от того, где в сценарии вызывается функция. Похоже, он просто возвращает время, когда скрипт впервые начал выполняться.
Для целей ведения журнала было бы чрезвычайно полезно иметь возможность получать инкрементные отметки времени из сценария. Это возможно? Есть ли способ сделать это относительно легким?
Редактировать: Предполагает ли пример для функции микровремя (), что она могла бы это сделать. Кто-нибудь может подтвердить?
Обновлять: microtime () действительно работает, но я не могу отформатировать его с помощью функции date (), потому что date () принимает временные метки только как целые числа (т.е. без микросекунд). Как мне получить правильно отформатированную дату из значения, возвращаемого функцией microtime ()?






http://us.php.net/microtime дает мне разное время в одном и том же скрипте.
Вы можете использовать Пакет сравнительного анализа груши для получения информации о времени и профилировании.
Я запустил этот код на своей машине:
<?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() не просто возвращает время начала выполнения.
Прежде всего, датировать() используется для форматирования метки времени - это просто поведение по умолчанию, которое будет использовать текущую метку времени, когда date() вызывается без второго параметра. Используемая метка времени будет меткой времени в момент вызова функции - вызов date('Y-m-d') аналогичен вызову date('Y-m-d', time()), где время() предоставит вам
[...] the current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT).
Вы получаете одну и ту же метку времени каждый раз, когда вызываете date(), потому что ваш сценарий слишком быстр и выполняется в течение одной секунды, что не приводит к изменению метки времени.
Чтобы решить вашу вторую проблему форматирования возвращаемого значения микровремя (), вы можете сделать следующее (непроверено)
function formatTime($microtime, $format)
{
list($timestamp, $fraction) = explode('.', $microtime);
return date($format, (int)$timestamp) . '.' . $fraction;
}
Значение, присвоенное $microtime, должно быть float, которое вы получите, когда передадите true в качестве параметра для microtime().