[RESOLU] intervals en milliseconds

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] intervals en milliseconds

Re: intervals en milliseconds

par zika » 11 déc. 2013, 12:41

Bonjour et merci beaucoup pour vos conseils :)
pour moi le sujet est ok.
MER-CI à tous ;)

Re: intervals en milliseconds

par Mazarini » 06 déc. 2013, 11:22

Ajouter "0:", c'est pour avoir le format HH:MM:SS. Ca correspond à HH: puisque le reste correspond à MM:SS.

Re: intervals en milliseconds

par zika » 06 déc. 2013, 10:02

function ecart_qualif($arg1,$arg2){					
$tab = array();
foreach (array ($arg1,$arg2) as $temps) {
        list($t,$ms) = explode (',',$temps);
        $tab[]= strtotime("0:".$t)*1000+intval($ms);
}
$ecart_qualif = (intval($tab[0]-$tab[1]))/1000;		
	$newtps = str_replace(".", ",", $ecart_qualif);	
	echo $newtps;									
}
voilà le code mis à jours.
je ne comprends pas la ligne tab[]= strtotime("0:".$t)*1000+intval($ms);
mais sinon le reste ça peut aller.
merci pour toutes ses infos :)

EDIT: si l'écart est de plus de 60secondes il affiche 60 et plus, mais pas en minute. (je ne sais pas dans quel cas c est possible mais bon.)

Re: intervals en milliseconds

par zika » 06 déc. 2013, 09:58

Bonjour,
donc mon code fonctionne et le code de Aureusms fonctionne aussi mais sans la virgule des millièmes à l affichage.
mais comme je ne comprends pas le code, je ne sais pas s'il y a un bug avec les minutes à anticiper.

Re: intervals en milliseconds

par Aureusms » 06 déc. 2013, 00:18

Je prends un peu le post sans avoir lu les posts précédents mais as-tu essayé :
<?php
$temps_de_qualif = "1:25,332";
$temps_pole_position = "1:25,227";

$tab = array();
foreach (array ($temps_de_qualif,$temps_pole_position) as $temps) {
	list($t,$ms) = explode (',',$temps);
	$tab[]= strtotime("0:".$t)*1000+intval($ms);
}
$ecart_qualf = intval($tab[0]-$tab[1]);
?>

Re: intervals en milliseconds

par zika » 05 déc. 2013, 23:35

function ecart_qualif($arg1,$arg2){					//explose mn sec millieme
	list($mn_sc_1a, $ml_1) = explode(',', $arg1);
	list($mn_1, $sc_1) = explode(':', $mn_sc_1a);
	$sc_1a = ($mn_1*60)+$sc_1;						//pour corriger le bug de la minute 1:00,234 VS 0:59,123
	$tps1 = $sc_1a.$ml_1;							//recompose sec et mel en une valeur
	list($mn_sc_2a, $ml_2) = explode(',', $arg2);
	list($mn_2, $sc_2) = explode(':', $mn_sc_2a);
	$sc_2a = ($mn_2*60)+$sc_2;						//pour corriger le bug de la minute 1:00,234 VS 0:59,123
	$tps2 = $sc_2a.$ml_2;							//recompose sec et mel en une valeur
	$ecart_qualif = ($tps1-$tps2)/1000;				//soustrait et / 1000 pour afficher les sec.000
	$newtps = str_replace(".", ",", $ecart_qualif);	// remplace le . par , pour affichage correcte!
	echo $newtps;									// affiche le résultat!
}

Re: intervals en milliseconds

par zika » 05 déc. 2013, 18:13

$tps1 = $sc_1.$ml_1;
à remplacer par :
$pts1 = (float) $mn_1 * 60.0 + (float) $sc_1 + (float) $ml_1 / 1000.0

idem pour $pts2

En fait je vois 2 pbs sinon :
1) si 0:59,123 vs 1:00,234
2) si 1:12,34 et pas 1:12,340
c'est effectivement un bug.
par contre tes modifications affichent un résultat avec une charette de chiffre après la virgule comment limiter à 3?

merci sirakawa mais je ne comprend pas le fonctionnement de ta fonction, je dois être encore trop jeune en php ;)

Re: intervals en milliseconds

par sirakawa » 05 déc. 2013, 17:34

Un essai
<?PHP
function convertir($chaine)
{

$t = explode(":", $chaine);

$t1 = explode(",", $t[1]);
$minutes intval($t[0]);
	$secondes = intval($t1[0]);
	$milli = intval($t1[1]);  
$temps = ($minutes*60)+($secondes*1000)+$milli;
return $temps;
}

$z = "1:25,332";

//$z = $z*1;

$t1 =convertir($z);
print "<br>t1: $t1";
$t2= convertir ("1:25,279");
print"<br>t2 $t2";
$diff = $t2 - $t1;
$somme = $t1+$t2;
print "<br>DIFF $diff $somme";
?>

Re: intervals en milliseconds

par Mazarini » 05 déc. 2013, 17:22

$tps1 = $sc_1.$ml_1;
à remplacer par :
$pts1 = (float) $mn_1 * 60.0 + (float) $sc_1 + (float) $ml_1 / 1000.0

idem pour $pts2

En fait je vois 2 pbs sinon :
1) si 0:59,123 vs 1:00,234
2) si 1:12,34 et pas 1:12,340

Re: intervals en milliseconds

par zika » 05 déc. 2013, 17:08

merci pour le coup de main.

Code : Tout sélectionner

function ecart_qualif($arg1,$arg2){ //explose mn sec millieme list($mn_sc_1a, $ml_1) = explode(',', $arg1); list($mn_1, $sc_1) = explode(':', $mn_sc_1a); $tps1 = $sc_1.$ml_1; //recompose sec et mel en une valeur list($mn_sc_2a, $ml_2) = explode(',', $arg2); list($mn_2, $sc_2) = explode(':', $mn_sc_2a); $tps2 = $sc_2.$ml_2; //recompose sec et mel en une valeur $ecart_qualif = ($tps1-$tps2)/1000; //soustrait et / 1000 pour afficher les sec.000 $newtps = str_replace(".", ",", $ecart_qualif); // remplace le . par , pour affichage correcte! echo $newtps; // affiche le résultat! }
si tps 2 est plus petit que tps1 j ai une erreur. donc en regroupant les secondes et les millièmes, je ne peux plus avoir l erreur.
ensuite je recompose mon résultat.
je pense qu'il y a plus simple mais à mon niveau c'est ce que je peux faire.
je ne pense pas que mon pilote se prendra 1 mn par tour, ou sinon il faut qu il reprenne le pingpong!
encore merci pour le partage.

Re: intervals en milliseconds

par xTG » 05 déc. 2013, 16:59

Topic auquel j'avais participé mais le résultat n'est pas fait à partir de PHP mais du SGBD, en l’occurrence dans son cas grâce à SQLite.
Mais il n'a pas donné suite. :)

Selon moi il n'existe pas de fonction fournie par PHP pour faire cela car il ne gère en opération que des secondes (timestamp est son plus bas niveau).
Après tu peux très bien avoir d'autres unités mais pas mélangées entre elles.
Il sait soustraire des microsecondes pour peu qu'il n'y ai que cela dans la variable en gros.
function ecart_qualif($arg1,$arg2){
   list($mn_sc_1a, $ml_1) = explode(',', $arg1);
   list($mn_1, $sc_1) = explode(':', $mn_sc_1a);
   
   list($mn_sc_2a, $ml_2) = explode(',', $arg2);
   list($mn_2, $sc_2) = explode(':', $mn_sc_2a);

   $ecart_millisecondes = $ml_2 - $ml_1;
   $ecart_secondes = $sc_2 - $sc_1;
   $ecart_mn = $mn_2 - $mn1;

   return $ecart_mn . ':' . $ecart_secondes . ',' . $ecart_millisecondes;
}
Voilà la base en gros (non testé), il resterai je pense à gérer les retenues inversées.

Re: intervals en milliseconds

par zika » 05 déc. 2013, 16:48

pour le moment je test:

Code : Tout sélectionner

function ecart_qualif($arg1,$arg2){ list($mn_sc_1a, $ml_1) = explode(',', $arg1); list($mn_1, $sc_1) = explode(':', $mn_sc_1a); $tps1 = $sc_1.$ml_1; list($mn_sc_2a, $ml_2) = explode(',', $arg2); list($mn_2, $sc_2) = explode(':', $mn_sc_2a); $tps2 = $sc_2.$ml_2; echo $ecart_qualif = ($tps1-$tps2)/1000; }
pour montrer que je cherche une solution quand même.
j'ai du mal à croire qu'il n existe pas de fonction pour :)

Re: intervals en milliseconds

par zika » 05 déc. 2013, 16:44

il me renvoie "0"

Re: intervals en milliseconds

par Mazarini » 05 déc. 2013, 16:37

tu peux essayer :
$t1 = mktime (0, 1, 25.332);
$t2 = mktime (0, 1, 25.279);
echo $t1 - $t2;
Je ne suis pas sur que le paramètre "seconde" accepte les décimales.

Re: intervals en milliseconds

par zika » 05 déc. 2013, 16:06

Bonjour,
j'ai regardé mais je n'ai pas d'exemple d'utilisation me permettant de les comprendre :( donc j'explore par rapport à ce que je connais et ça va plutôt vite!
mon bouquin me dit: mktime() me donne une date or je n ai que des heures grand max si j additionne tous les tours parcouru dans l année.
strtotime() est aussi sur la date.
arf! ca se présente pas bien.