我注意到,无论给定脚本的执行时间如何,每个date()调用都将返回相同的时间戳,而不管脚本中调用函数的位置。看起来它只是返回脚本首次开始执行的时间。
为了进行日志记录,能够从脚本中获取增量时间戳非常有用。这可能吗?有没有办法做到相对轻量级?
修改:microtime()功能的示例是否表示可能会执行此操作。任何人都可以确认吗?
更新: microtime()确实有效,但我无法使用date()函数对其进行格式化,因为date()只接受时间戳作为整数(所以没有微秒)。如何从microtime()返回的值中获取格式正确的日期?
答案 0 :(得分:3)
我在我的机器上运行了这段代码:
<?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 :(得分:3)
首先,date()用于格式化时间戳 - 当没有第二个参数调用date()
时,它只是默认行为,它将使用当前时间戳。使用的时间戳将是调用函数时的时间戳 - 调用date('Y-m-d')
与调用date('Y-m-d', time())
相同,time()将为您提供
[...]当前测量的时间 自Unix Epoch以来的秒数 (1970年1月1日00:00:00 GMT)。
每次调用date()
时,您只会得到相同的时间戳,因为您的脚本太快并且在一秒钟内运行,导致没有时间戳更改。
要解决格式化microtime()返回值的第二个问题,您可以执行以下操作(未经测试)
function formatTime($microtime, $format)
{
list($timestamp, $fraction) = explode('.', $microtime);
return date($format, (int)$timestamp) . '.' . $fraction;
}
$microtime
的值应该是float
,当您将true
作为参数传递给microtime()
答案 2 :(得分:1)
http://us.php.net/microtime在同一个剧本中给了我不同的时间。
答案 3 :(得分:0)
您可以使用Pear Benchmarking package获取时间和分析信息。