Décompte de temps

Eléphanteau du PHP | 40 Messages

23 sept. 2016, 18:16

Coucou c'est encore moiii

J'essais de faire un petit décompte de temps pendant la récupération des données d'un fichier pour que l'utilisateur puisse voir combien de temps ça fait et se demander si ça commence pas à faire trop long (et surtout si c'est pas figé :lol: )

Code : Tout sélectionner

$startTime = time(); while (/**$temp = fgetcsv($fileFd, 0, "\t")**/42) { print "\rRécupération des données de $name... (temps écoulé: "; if (($time = time() - $startTime) > 59) { print $time / 60 . "min" . $time - $time / 60 * 60 . "s)"; } else { print $time . "s)"; } /** $file[] = $temp; **/ }
Au début je faisais time() - $startTime à chaque tour de boucle et ça faisait un bon compteur en secondes, puis après j'ai voulu faire un truc pour qu'au delà des 59 secondes ça affiche en minutes (1min42s, etc) mais ça amrche pas du tout :lol:
Je me demandai s'il y avait pas une fonction pour ça dans la vaste libraire du php? Sinon j'veux bien un petit indice parce que mon calcul a l'air foireux :lol:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

23 sept. 2016, 18:30

Bonjour,

Voici un exemple à adapter selon ton besoin :
<?php

function secondsToTime($seconds) {
	$dtF = new DateTime("@0");
	$dtT = new DateTime("@$seconds");
	return $dtF->diff($dtT)->format('%h heures %i minutes %s secondes');
}

echo secondsToTime(16467);
Démo : https://eval.in/648603
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 40 Messages

26 sept. 2016, 09:58

Bonjour,

Voici un exemple à adapter selon ton besoin :
<?php

function secondsToTime($seconds) {
	$dtF = new DateTime("@0");
	$dtT = new DateTime("@$seconds");
	return $dtF->diff($dtT)->format('%h heures %i minutes %s secondes');
}

echo secondsToTime(16467);
Démo : https://eval.in/648603
Je dois avouer que je comprends pas grand chose là surtout sur le return :shock:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 sept. 2016, 10:29

salut,

pour datetime => http://php.net/manual/fr/class.datetime.php , et la méthode diff en particulier : http://php.net/manual/fr/datetime.diff.php
pour les paramètre l'utilisation de @ indique que le paramaètre est un timestamp unix http://php.net/manual/fr/datetime.formats.compound.php
du coup @0 c'est le timestamp zéro.
@$seconds c'est le timestamp qui correspond à $second (en secondes).

ensuite diff c'est la différence entre dtF et dtT, format format le retour (4 heures 34 minutes 27 secondes)
C'est ce qui est indiqué sur le lien de @rthur

dans ton cas tu va vouloir faire la différence entre start time et maintenant.
du coup startTime est a déclarer, comme tu le fait, avant la boucle, si tu ne passe pas de paramètre à dateTime c'est 'now' qui est utilisé.
dans la boucle instanciation du dateTime "courant" + diff avec le départ et affichage au format que tu souhaites avec format (du coup tu te fait pas chier à gérer les conversions ;) )
tu vas alléger un peu le code et simplifier la maintenance ;)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 40 Messages

26 sept. 2016, 10:47

salut,

pour datetime => http://php.net/manual/fr/class.datetime.php , et la méthode diff en particulier : http://php.net/manual/fr/datetime.diff.php
pour les paramètre l'utilisation de @ indique que le paramaètre est un timestamp unix http://php.net/manual/fr/datetime.formats.compound.php
du coup @0 c'est le timestamp zéro.
@$seconds c'est le timestamp qui correspond à $second (en secondes).

ensuite diff c'est la différence entre dtF et dtT, format format le retour (4 heures 34 minutes 27 secondes)
C'est ce qui est indiqué sur le lien de @rthur

dans ton cas tu va vouloir faire la différence entre start time et maintenant.
du coup startTime est a déclarer, comme tu le fait, avant la boucle, si tu ne passe pas de paramètre à dateTime c'est 'now' qui est utilisé.
dans la boucle instanciation du dateTime "courant" + diff avec le départ et affichage au format que tu souhaites avec format (du coup tu te fait pas chier à gérer les conversions ;) )
tu vas alléger un peu le code et simplifier la maintenance ;)

@+
J'comprends un peu mieux mais je crois qu'il me manque une notion de classe et d'objet pour vraiment comprendre xD Du coup j'vais me chercher ça, merci x)
EDIT: en fait c'est assez similaire aux structures du C si on considère une classe pouvant stocker des fonctions (méthodes) et des variables(propriétés) comme une structure, qu'on la définit avec un = new <nom> au lieu de struct <nom> et qu'on accède a ses éléments avec des ->

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 sept. 2016, 11:09

voui tu peux voir ça comme ça :-)~

y a rien de complexe, juste l'utilisation d'un modèle full objet qui ne ressemble pas a du procédurale à l'utilisation, c'est une habitude à prendre ;)

@+
Il en faut peu pour être heureux ......