在PHP中获得精确的时间

时间:2008-10-23 18:12:35

标签: php logging date timestamp

我注意到,无论给定脚本的执行时间如何,每个date()调用都将返回相同的时间戳,而不管脚本中调用函数的位置。看起来它只是返回脚本首次开始执行的时间。

为了进行日志记录,能够从脚本中获取增量时间戳非常有用。这可能吗?有没有办法做到相对轻量级?

修改microtime()功能的示例是否表示可能会执行此操作。任何人都可以确认吗?

更新: microtime()确实有效,但我无法使用date()函数对其进行格式化,因为date()只接受时间戳作为整数(所以没有微秒)。如何从microtime()返回的值中获取格式正确的日期?

4 个答案:

答案 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获取时间和分析信息。