2011-01-17 17 views
6

Nie mogę otoczyć mojego mózgu tym, więc mam nadzieję, że ktoś może pomóc. Mam utwór utworu, który ma długość utworu w milisekundach. Mam też datę, kiedy utwór został odtworzony w formacie DATETIME. Próbuję sprawdzić, ile milisekund pozostało w czasie odtwarzania utworu.Jak uzyskać różnicę czasu w milisekundach

Przykład

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

Używam następujących czynności, aby określić czas w lewo, ale nie wydaje się prawidłowe.

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

Każda pomoc zostanie bardzo doceniona.

+6

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

+1

Co masz na myśli mówiąc „nie wydaje się poprawne”? –

+0

biorąc pod uwagę, że DATETIME ma tylko dokładność do sekundy, a nie milisekundy ... byłoby to dość trudne. – dqhendricks

Odpowiedz

1

używam następujący zestaw funkcji do obsługi dat MySQL, może uda się pomóc:

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; 
} 

w Twoim przypadku powinno to być coś w rodzaju:

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

nadzieję, że to działa: D

+0

Nieźle, jeszcze kilka komentarzy byłoby miłych ... poza tym dobrym kodowaniem! – ItsMeDom

0

Można przekonwertować ciąg danych/wejście do unixtimestamp, a następnie uzyskać różnicę. Jeśli masz milisekundy, unixtimestamp będzie miał cyfry po przecinku. Gdy masz już tę różnicę, możesz przekonwertować tę wartość z powrotem na swój wzorzec daty za pomocą daty funkcji w php. Poniżej znajduje się link.

Powodzenia!

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

14

Dla moich potrzeb użyłem następujące podejście:

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

Tak, chodzi o to, że używamy reprezentacji pływaka czasu tutaj (patrz http://php.net/manual/en/function.microtime.php)

Nadzieję można przyjąć to dla twoich potrzeb.

0

użyłem tej funkcji dla mojej jaźni:

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

Zawsze zwraca zero. – JCarlos

0

Pisałem tę funkcję, aby obliczyć czas pomiędzy dwoma podanymi znaczników czasu (z milisekund).

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 
Powiązane problemy