2011-01-17 3 views
6

Je ne peux pas entourer mon cerveau autour de celui-ci alors j'espère que quelqu'un peut vous aider. J'ai une piste de chanson qui a la longueur de la chanson en millisecondes. J'ai aussi la date à laquelle la chanson a été jouée au format DATETIME. Ce que j'essaie de faire est de savoir combien de millisecondes il reste dans la durée de la chanson.Comment obtenir le décalage horaire en millisecondes

Exemple

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

J'utilise ce qui suit pour déterminer le temps laissé, mais il ne semble pas correct.

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

Toute aide serait grandement appréciée.

+6

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

+1

Que voulez-vous dire par "ne semble pas correct"? –

+0

compte tenu de DATETIME n'a que la précision jusqu'à la seconde, et pas milliseconde ... ce serait assez difficile. – dqhendricks

Répondre

1

i utiliser l'ensemble des fonctions suivantes pour la gestion des dates de MySQL, ils peuvent peut-être vous aider:

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

dans votre cas, il devrait être quelque chose comme:

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

espérons que cela fonctionne: D

+0

Pas mal, juste un peu plus de commentaires serait bien ... A part ce bon codage! – ItsMeDom

0

Vous pouvez convertir la chaîne datetime/input en unixtimestamp et obtenir la différence. Si vous avez des millisecondes, unixtimestamp aura des chiffres après la virgule. Une fois que vous avez la différence, vous pouvez convertir cette valeur dans votre modèle de date en utilisant la date de la fonction en php. Voici le lien.

Bonne chance!

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

14

Pour mes besoins, j'utilisé l'approche suivante:

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

Ainsi, le point est que nous utilisons la représentation flottante de temps ici (voir http://php.net/manual/en/function.microtime.php)

espère que vous adopterez pour vos besoins

0

J'ai utilisé cette fonction pour mon auto:

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

Il renvoie toujours zéro. – JCarlos

0

J'ai écrit cette fonction pour calculer la durée entre deux données horodatages (avec millisecondes).

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 
Questions connexes