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()を使用してタイムスタンプをフォーマットします。これは、 2 番目のパラメーターなしで呼び出されたときに現在のタイムスタンプを使用するというデフォルトの動作です。使用されるタイムスタンプは、関数が呼び出された瞬間のタイムスタンプになります。呼び出しは、 time()が提供するdate('Y-m-d')呼び出しと同じですdate('Y-m-d', time())

[...] Unix エポック (1970 年 1 月 1 日 00:00:00 GMT) からの秒数で測定された現在の時刻。

date()スクリプトが速すぎて 1 秒以内に実行され、タイムスタンプが変更されないため、呼び出すたびに同じタイムスタンプしか取得できません。

microtime()の戻り値をフォーマットするという 2 番目の問題に対処するには、次のようにします (未テスト)。

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

に与えられる値は である$microtime必要があります。これは、パラメーターとして にfloat渡すときに取得されます。truemicrotime()

于 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 に答える