7

次のような回避策を使用して、PHPでマイクロ秒の日時を取得できます。

list($usec, $sec) = explode(" ", microtime());
echo date("Y-m-d\TH:i:s", $sec) . "." . floatval($usec)*pow(10,6);

2 つの日時のマイクロ秒単位の差が必要ですが、回避策がありません。

$datetime1 = new DateTime('2013-08-14 18:49:58.606');
$datetime2 = new DateTime('2013-08-14 22:27:19.272');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%h hours %i minutes %s seconds %u microseconds');

DateInterval::formatには、フォーマット文字 %u または同等のマイクロ秒がありません。

誰でもこれの回避策を知っていますか?

4

6 に答える 6

4

マイクロ秒の DateTime オブジェクトを手動で作成する:

$d = new DateTime("15-07-2014 18:30:00.111111");

マイクロ秒単位で現在の時刻の DateTime オブジェクトを取得します。

$d = date_format(new DateTime(),'d-m-Y H:i:s').substr((string)microtime(), 1, 8);

マイクロ秒単位の 2 つの DateTime オブジェクトの差 (例: 2.218939 を返します)

//Returns the difference, in seconds, between two datetime objects including
//the microseconds:

function mdiff($date1, $date2){
//Absolute val of Date 1 in seconds from  (EPOCH Time) - Date 2 in seconds from (EPOCH Time)
$diff = abs(strtotime($date1->format('d-m-Y H:i:s.u'))-strtotime($date2->format('d-m-Y H:i:s.u')));

//Creates variables for the microseconds of date1 and date2
$micro1 = $date1->format("u");
$micro2 = $date2->format("u");

//Absolute difference between these micro seconds:
$micro = abs($micro1 - $micro2);

//Creates the variable that will hold the seconds (?):
$difference = $diff.".".$micro;

return $difference;
}

基本的に、strtotime を使用して DateTime オブジェクトの違いを見つけてから、余分なマイクロ秒を追加します。

于 2014-07-15T14:59:50.750 に答える
0

これを交換する必要がありました

$micro = abs($micro1 - $micro2);

これとともに

str_pad(abs($micro1 - $micro2), 6, '0', STR_PAD_LEFT);

何らかの理由で正しいマイクロタイムを取得する。

于 2016-06-09T19:43:26.823 に答える
0
function mdiff($date1, $date2){
  //Absolute val of Date 1 in seconds from  (EPOCH Time) - Date 2 in seconds from (EPOCH Time)
  $diff = abs(strtotime($date1->format('d-m-Y H:i:s.u'))-strtotime($date2->format('d-m-Y H:i:s.u')));

  //Creates variables for the microseconds of date1 and date2
  $micro1 = $date1->format("u");
  $micro2 = $date2->format("u");

  //Difference between these micro seconds:
  $diffmicro = $micro1 - $micro2;

  list($sec,$micro) = explode('.',((($diff) * 1000000) + $diffmicro )/1000000);

  //Creates the variable that will hold the seconds (?):
  $difference = $sec . "." . str_pad($micro,6,'0');

  return $difference;
}

この関数は正しい差を返します

Example:
    Start:"2016-10-27 17:17:52.576801"
    End:"2016-10-27 17:18:00.385801"
    Difference:"7.809000"

    Old Function:
    Difference:"8.191000"
于 2016-10-27T15:12:54.893 に答える