16

PHPでマイクロタイムを減算してミリ秒単位で日付を表示する方法は?

例: 終了日時を設定しました

$endtime = 2012-02-21 10:29:59;

次に、マイクロタイムから変換された現在の日付または開始日があります

$starttime = 2012-02-21 10:27:59.452;

function getTimestamp()
{
        $microtime = floatval(substr((string)microtime(), 1, 8));
        $rounded = round($microtime, 3);
        return date("Y-m-d H:i:s") . substr((string)$rounded, 1, strlen($rounded));
}

echo getTimestamp(); //sample output 2012-02-21 10:27:59.452

今私は減算したい: $finaldate = $endtime - $starttime;

出力を次のようにしたい: 00:00:02.452

4

2 に答える 2

26

microtime開始/終了値に使用する必要があり、最後に表示するためにフォーマットするだけです。

// Get the start time in microseconds, as a float value
$starttime = microtime(true);

/************/
/* Do stuff */
/************/

// Get the difference between start and end in microseconds, as a float value
$diff = microtime(true) - $starttime;

// Break the difference into seconds and microseconds
$sec = intval($diff);
$micro = $diff - $sec;

// Format the result as you want it
// $final will contain something like "00:00:02.452"
$final = strftime('%T', mktime(0, 0, $sec)) . str_replace('0.', '.', sprintf('%.3f', $micro));

注: これは float 値を返しmicrotime、float 算術を使用して数学を単純化するため、float の丸めの問題により数値が非常にわずかにずれている可能性がありますが、最終的には結果を 3 桁に丸めています。いずれにせよ、プロセッサのタイミングは浮動小数点エラーよりも大きいため、これは複数のレベルで問題になることはありません。

于 2012-02-21T03:00:51.593 に答える
3

phpmyadminは、このようなコードを使用して、クエリにかかった時間を計算します。それはあなたの要件に似ています:

//time before
list($usec, $sec) = explode(' ',microtime($starttime));
$querytime_before = ((float)$usec + (float)$sec);
/* your code */

//time after
list($usec, $sec) = explode(' ',microtime($endtime));
$querytime_after = ((float)$usec + (float)$sec);
$querytime = $querytime_after - $querytime_before;

これはあなたのために働くはずだと思います。あなたはただあなたの出力フォーマットを理解する必要があります

于 2012-02-21T03:04:28.807 に答える