2011-01-17 22 views
6

No puedo ajustar mi cerebro con este, así que espero que alguien pueda ayudar. Tengo una canción que tiene la duración de la canción en milisegundos. También tengo la fecha de reproducción de la canción en formato DATETIME. Lo que trato de hacer es averiguar cuántos milisegundos quedan en el tiempo de reproducción de la canción.Cómo obtener la diferencia de tiempo en milisegundos

Ejemplo

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

Estoy utilizando el siguiente para determinar el tiempo de la izquierda, pero no parece correcto.

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

Cualquier ayuda sería muy apreciada.

+6

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

+1

¿Qué quiere decir con "no parece correcta"? –

+0

considerando que DATETIME solo tiene precisión hasta el segundo, y no en milisegundo ... esto sería bastante difícil. – dqhendricks

Respuesta

1

utilizo el siguiente conjunto de funciones para el manejo de fechas de MySQL, tal vez puedan ayudarle a:

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

en su caso, debería ser algo así como:

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

esperemos que funcione: D

+0

No está mal, solo unos pocos comentarios más serían agradables ... ¡Aparte de esa buena codificación! – ItsMeDom

0

Puede convertir la cadena/entrada datetime en unixtimestamp y luego obtener la diferencia. Si tiene milisegundos, unixtimestamp tendría dígitos después del decimal. Una vez que tenga la diferencia, puede convertir ese valor de nuevo en su patrón de fecha y hora utilizando la fecha de la función en php. A continuación está el enlace.

¡Buena suerte!

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

14

Para mis necesidades me utilizó el siguiente enfoque:

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

Por lo tanto, el punto es que utilizamos la representación de flotación de tiempo aquí (ver http://php.net/manual/en/function.microtime.php)

Esperamos que se adopte para tus necesidades

0

He utilizado esta función para mí mismo:

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

Siempre devuelve cero. – JCarlos

0

He escrito esta función para calcular la duración entre dos marcas de tiempo dado (con milisegundos).

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 
Cuestiones relacionadas