2011-01-17 28 views
6

私はこの脳の周りに脳を包むことができないので、誰かが助けてくれることを願っています。私は、曲の長さがミリ秒単位である曲トラックを持っています。また、曲がDATETIME形式で演奏された日もあります。私がしようとしているのは、歌の演奏時間に何ミリ秒間残っているかを知ることです。時間差をミリ秒単位で取得する方法

$tracktime = 219238; 
$dateplayed = '2011-01-17 11:01:44'; 
$starttime = strtotime($dateplayed); 

私は残された時間を決定するために、次を使用していますが、それは正しいようではありません。

$curtime = time(); 
$timeleft = $starttime+round($tracktime/1000)-$curtime; 

ご協力いただければ幸いです。

私は多分、彼らはあなたを助けることができる、MySQLの日付を処理するための関数の次のセットを使用し
+6

http://php.net/manual/en/function.microtime.php – thetaiko

+1

"正しいと思わない"とはどういう意味ですか? –

+0

DATETIMEを考えるとミリ秒ではなく2番目の精度までしかありません...これはかなり難しいでしょう。 – dqhendricks

答えて

1

:あなたのケースで

function sqlArray($date, $trim=true) { 
    $result = array(); 
    $result['day'] = ($trim==true) ? ltrim(substr($date,8,2),'0') : substr($date,8,2); 
    $result['month'] = ($trim==true) ? ltrim(substr($date,5,2),'0') : substr($date,5,2); 
    $result['year'] = substr($date,0,4); 
    $result['hour'] = substr($date,11,2); 
    $result['minutes'] = substr($date,14,2); 
    return $result; 
} 

function sqlInt($date) { 
    $date = sqlArray($date); 
    return mktime($date['hour'], $date['minutes'], 0, $date['month'], $date['day'], $date['year']); 
} 

function difference($dateStart, $dateEnd) { 
    $start = sqlInt($dateStart); 
    $end = sqlInt($dateEnd); 
    $difference = $end - $start; 
    $result = array(); 
    $result['ms'] = $difference; 
    $result['hours'] = $difference/3600; 
    $result['minutes'] = $difference/60; 
    $result['days'] = $difference/86400; 
    return $result; 
} 

それはのようなものでなければなりません:

$dateplayed = '2011-01-17 11:01:44'; 
print_r(difference($dateplayed, date('Y:m:d'))); 

は、それが動作願っています:D

+0

悪くない、ちょっとだけコメントがうまくいくだろう...その良いコーディング以外に! – ItsMeDom

0

datetime文字列/入力をunixtimestampに変換して差をつけることができます。ミリ秒がある場合、unixtimestampは小数点以下の桁を持ちます。差があれば、その値をphpの関数の日付を使って日付の時間パターンに変換することができます。以下はリンクです。

幸運を祈る!私のニーズのために

http://php.net/manual/en/function.date.php

14

私は、次のアプローチを使用:

$curTime = microtime(true); 
// something time consuming here 
... 
// get time difference in milliseconds 
$timeConsumed = round(microtime(true) - $curTime,3)*1000; 

ので、ポイントは我々がここでの時間のフロート表現を使用することである(http://php.net/manual/en/function.microtime.phpを参照)

はあなたが採用するホープそれはあなたのニーズのためです。

0

私は私の自己のために、この機能を使用:

public function calculateStringTimeToMiliseconds($timeInString) 
{ 
    $startTime = new \DateTime("now"); 
    $endDate = new \DateTime($timeInString); 

    $interval = $startTime->diff($endDate); 

    $totalMiliseconds = 0; 
    $totalMiliseconds += $interval->m * 2630000000; 
    $totalMiliseconds += $interval->d * 86400000; 
    $totalMiliseconds += $interval->h * 3600000; 
    $totalMiliseconds += $interval->i * 60000; 
    $totalMiliseconds += $interval->s * 1000; 

    return $totalMiliseconds; 
} 
+0

常にゼロを返します。 – JCarlos

0

を私は(ミリ秒で)与えられた2つのタイムスタンプ間の期間を計算するために、この機能を書かれています。

function calculateTransactionDuration($startDate, $endDate) 
{ 
    $startDateFormat = new DateTime($startDate); 
    $EndDateFormat = new DateTime($endDate); 
    // the difference through one million to get micro seconds 
    $uDiff = ($startDateFormat->format('u') - $EndDateFormat->format('u'))/(1000 * 1000); 
    $diff = $startDateFormat->diff($EndDateFormat); 
    $s = (int) $diff->format('%s') - $uDiff; 
    $i = (int) ($diff->format('%i')) * 60; // convert minutes into seconds 
    $h = (int) ($diff->format('%h')) * 60 * 60; // convert hours into seconds 

    return sprintf('%.6f', abs($h + $i + $s)); // return total duration in seconds 
} 

$startDate = '02-Mar-16 07.22.13.000548'; 
$endDate = '02-Mar-16 07.22.14.000072'; 
$difference = calculateTransactionDuration($startDate, $endDate); 

//Outputs 0.999524 seconds 
関連する問題