Salut à tous, j'essaie de calculer le temps écoulé en php. Le problème n'est pas en php, c'est avec mes compétences en mathématiques. Par exemple: Time In: 11:35:20 (hh: mm: ss), disons maintenant que l’heure actuelle est: 12:00:45 (hh: mm: ss), le décalage horaire dans ma formule sortie: 1: -34: 25 . Ça devrait être: 25:25
$d1=getdate();
$hournew=$d1['hours'];
$minnew=$d1['minutes'];
$secnew=$d1['seconds'];
$hourin = $_SESSION['h'];
$secin = $_SESSION['s'];
$minin = $_SESSION['m'];
$h1=$hournew-$hourin;
$s1=$secnew-$secin;
$m1=$minnew-$minin;
if($s1<0) {
$s1+=60; }
if($s1>=(60-$secin)) {
$m1--; }
if($m1<0) {
$m1++; }
echo $h1 . ":" . $m1 . ":" . $s1;
Toute aide s'il vous plaît?
MODIFIER
Désolé, je devais probablement ajouter que la page s'actualisait toutes les secondes pour afficher le nouveau temps écoulé; je devais donc utiliser ma méthode ci-dessus. Mes excuses pour ne pas expliquer correctement.
Cela vous donnera le nombre de secondes entre le début et la fin.
<?php
// microtime(true) returns the unix timestamp plus milliseconds as a float
$starttime = microtime(true);
/* do stuff here */
$endtime = microtime(true);
$timediff = $endtime - $starttime;
?>
Pour l'afficher ensuite à la manière d'une horloge, procédez comme suit:
<?php
// pass in the number of seconds elapsed to get hours:minutes:seconds returned
function secondsToTime($s)
{
$h = floor($s / 3600);
$s -= $h * 3600;
$m = floor($s / 60);
$s -= $m * 60;
return $h.':'.sprintf('%02d', $m).':'.sprintf('%02d', $s);
}
?>
Si vous ne souhaitez pas afficher les nombres après la décimale, ajoutez simplement round($s);
au début de la fonction secondsToTime()
.
En utilisant PHP >= 5.3
, vous pouvez utiliser DateTime
et sa méthode DateTime::diff()
, qui renvoie un DateInterval
object:
$first = new DateTime( '11:35:20' );
$second = new DateTime( '12:00:45' );
$diff = $first->diff( $second );
echo $diff->format( '%H:%I:%S' ); // -> 00:25:25
Gardez une trace de votre temps en utilisant la fonction 'time ()' . Vous pourrez convertir ultérieurement 'time ()' en d'autres formats.
$_SESSION['start_time'] = time();
$end_time = time();
$end_time - $_SESSION['start_time'] = 65 seconds (divide by 60 to get minutes)
Et vous pourrez ensuite comparer cela à une autre valeur ultérieurement.
Utilisez microtime si vous avez besoin de détails d'une milliseconde.
Vous pouvez implémenter les solutions présentées, mais j'aime bien utiliser la classe phptimer (ou d’autres, cette roue a été inventée à quelques reprises). L'avantage est que vous pouvez généralement définir le minuteur comme étant actif ou non, vous permettant ainsi de laisser les appels du minuteur dans votre code pour référence ultérieure sans ressaisir tous les points de temps.