Page 1 sur 2
probleme de variable au format time
Posté : 27 déc. 2006, 11:31
par Invité
Bonjour,
Voila, j'ai un petit souci, je voudrai additionner et soustraire des heures, mais je ne veux pas que cela me donner sur la base de 24hrs mais plus sur une durée. Je ne peux pas utiliser les fonction existante en sql, il faut que je le fasse en php.
Je sais qu'il existe des fonctions, et qu'il faut le transformer dans un autre format avant de faire l'addition ou la soustraction mais j'ai pas tout compris.
Merci d'avance
Posté : 27 déc. 2006, 11:33
par zeus
Dans ce cas là, rien de mieux qu'une petite recherche dans la FAQ
http://www.phpfrance.com/forums/voir_sujet-8323.php
Posté : 27 déc. 2006, 11:36
par Invité
pour ce qui concerne les dates j'ai compris mais pas pour les heures. Je ne vois pas de quel manière procédé
merci
Posté : 27 déc. 2006, 11:51
par Invité
en faite il faudrai que j'utilise sa ?
$heure = Array('annee'=>date('Y'), 'mois'=>date('m'), 'jour'=>date('d')); // vous pouvez aussi obtenir ce tableau avec la fonction getDate()
$N = 31;
// mktime fait automatiquement le calcul
$time = mktime(00, 00, 00, $date['mois'], $date['jour']+$N, $date['annee']);
$dansNjours = date('d/m/Y', $time);
echo $dansNjours;
Par contre je vais comment pour decomposer mon heure qui est au format 00:00:00 pour que j'ai heure=00; minute=00;seconde=00
merci
Posté : 27 déc. 2006, 11:52
par zeus
Regarde la documentation de mktime(), tu peut spécifier des heures

Posté : 27 déc. 2006, 12:03
par Invité
Bon j'ai fait sa mais cela marche pas bien sur :
Que faut il que je change ?
merci
list($h, $m, $s) = explode(":", $nbheure);
list($hr, $mi, $se) = explode(":", $row3[0]);
$heure = Array('annee'=>time('h'), 'mois'=>time('m'), 'jour'=>time('s')); // vous pouvez aussi obtenir ce tableau avec la fonction getDate()
$tps = Array('annee'=>time('hr'), 'mois'=>time('mi'), 'jour'=>time('se'));
// mktime fait automatiquement le calcul
$time = mktime($time('h'), $time('m')+$tps, $time('s'), 00, 00, 00);
$nbheure = time('h/m/s', $time);
echo $nbheure;
Posté : 27 déc. 2006, 12:39
par Invité
j'ai essayer de corriger mon code par rapport a ce que j'ai pu voir a divers endoit, et cela me donne une fois corriger :
$heure = Array('h'=>time('h', $nbheure), 'm'=>time('i', $nbheure), 's'=>time('s', $nbheure)); // vous pouvez aussi obtenir ce tableau avec la fonction getDate()
$tps = Array('hr'=>time('h', $row3[0]), 'mi'=>time('mi', $row3[0]), 'se'=>time('se', $row3[0]));
// mktime fait automatiquement le calcul
$time = mktime($time('h'), $time('m')-$tps, $time('s'), 00, 00, 00);
$nbheure = time('h:m:s', $time);
echo $nbheure;
Mais cela ne marche pas cela m'ecrit : Fatal error: Function name must be a string in
merci
Posté : 29 déc. 2006, 10:21
par Invité
vous n'avez vraiment pas d'idée ?
merci
Posté : 29 déc. 2006, 11:29
par mere-teresa
echo $nbheure; [/php] Mais cela ne marche pas cela m'ecrit : Fatal error: Function name must be a string in
Quel est ton erreur exactement ? Quelle ligne ? Quel est le code qui correspond à cette ligne ?
Posté : 03 janv. 2007, 13:07
par Invité
en faite cela ne m'ecrit plus cette erreur. J'ai quelque peut changer mon code maintenant il resemble a :
$heure = Array('h'=>date('H', $nbheure), 'm'=>date('i', $nbheure), 's'=>date('s', $nbheure)); // vous pouvez aussi obtenir ce tableau avec la fonction getDate()
$tps = Array('hr'=>date('H', $row3[0]), 'mi'=>date('i', $row3[0]), 'se'=>date('s', $row3[0]));
$time = mktime($heure['h'], $heure['m'] + $tps, $heure['s'], 00, 00, 00);
echo $time;
$nbheure = time('h:m:s', $time);
echo $nbheure.'ici';
mais sur cette ligne :
$time = mktime($heure['h'], $heure['m'] + $tps, $heure['s'], 00, 00, 00);
j'ai l'erreur :
Voila si vous aviez une idée des erreur que j'ai pu commaitre cela m'aiderai vivement. Merci d'avance.
Posté : 03 janv. 2007, 13:12
par Ryle
$heure['m'] + $tps
Il me semble que ton $tps soit un tableau et pas un nombre....

Posté : 03 janv. 2007, 14:19
par Invité
il faudrait donc que j'ajoute +$tps['m'] mais il faudrait que j'ajoute aussi les heures. Il n'y aura pas de probleme pour les calcus ? par exemple 01h40 + 01h30 = il me calculera bien 3h10 et non 02h70 ?
merci
Posté : 03 janv. 2007, 14:29
par Ryle
Bah pour les heures, il te suffit de faire pareil en ajoutant $heure['h'] et $tps['h']
Quant au résultat, le plus simple pour le savoir c'est d'essayer

Mais si cela peut te rassurer, il est peu probable qu'il te retourne un nombre de minute supérieur à 59, c'est l'intérêt des formats date ou time
(Nota : attention, si tu dépasses les 24h, ce sont les jours qui vont augmenter, et les heures retomberont à 0, etc.)
Posté : 03 janv. 2007, 14:46
par Invité
le probleme c'est que mois c'est plus un format temps que heure. Je dois pouvoir faire affixher 38 hrs 45h. C'est pour un calcule de temps de travail par mois.
merci
Posté : 03 janv. 2007, 15:27
par Ryle
Dans ce cas, il serait peut être plus judicieux de simplement additionner tes minutes et de faire la division par 60 pour savoir à combien d'heures elles correspondent :
$heures = $heure['h'] + $tps['h']; // ex 1 + 2
$minutes = $heure['m'] + $tps['m']; // ex 30 + 40
// détail des minutes
$nbHeuresCompletes = floor($minutes / 60); // (30+40) / 60 = 1.166 = 1
$nbMinutesRestantes = $minutes % 60; // (30+40) % 60 = 10
// détail des heures
$nbHeures = $heures + $nbHeuresCompletes;
// (1+2) + 1