2

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

出于日志记录的目的,能够从脚本中获取增量时间戳将非常有用。这可能吗?有没有一种相对轻量级的方法来做到这一点?

编辑:microtime()函数的示例是否表明它可能会这样做。任何人都可以确认吗?

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

4

4 回答 4

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()不只是返回执行开始的时间。

于 2008-10-23T19:04:20.693 回答
3

首先,date()用于格式化时间戳 - 它只是默认行为,它会在date()没有第二个参数的情况下调用当前时间戳。使用的时间戳将是调用函数时的时间戳 - 调用date('Y-m-d')与调用相同,date('Y-m-d', time())其中time()将为您提供

[...] 自 Unix 纪元(格林威治标准时间 1970 年 1 月 1 日 00:00:00)以来的秒数测量的当前时间。

每次调用时您只能获得相同的时间戳,date()因为您的脚本太快并且在一秒钟内运行,导致没有时间戳更改。

要解决格式化microtime()返回值的第二个问题,您可以执行以下操作(未经测试)

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

给定的值$microtime应该是 a float,当您将true其作为参数传递给microtime()

于 2008-10-23T19:04:35.903 回答
1

http://us.php.net/microtime在同一个脚本中给了我不同的时间。

于 2008-10-23T18:15:41.993 回答
0

您可以使用Pear Benchmarking 包来获取时间和分析信息。

于 2008-10-23T18:24:50.820 回答