probleme de variable au format time

Invité
Invité n'ayant pas de compte PHPfrance

27 déc. 2006, 11:31

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 déc. 2006, 11:33

Dans ce cas là, rien de mieux qu'une petite recherche dans la FAQ ;)
http://www.phpfrance.com/forums/voir_sujet-8323.php
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

27 déc. 2006, 11:36

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

Invité
Invité n'ayant pas de compte PHPfrance

27 déc. 2006, 11:51

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 déc. 2006, 11:52

Regarde la documentation de mktime(), tu peut spécifier des heures ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

27 déc. 2006, 12:03

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; 

Invité
Invité n'ayant pas de compte PHPfrance

27 déc. 2006, 12:39

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

Invité
Invité n'ayant pas de compte PHPfrance

29 déc. 2006, 10:21

vous n'avez vraiment pas d'idée ?


merci

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

29 déc. 2006, 11:29

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 ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Invité
Invité n'ayant pas de compte PHPfrance

03 janv. 2007, 13:07

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 :

Code : Tout sélectionner

Fatal error: Unsupported operand types in
Voila si vous aviez une idée des erreur que j'ai pu commaitre cela m'aiderai vivement. Merci d'avance.

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

03 janv. 2007, 13:12

$heure['m'] + $tps
Il me semble que ton $tps soit un tableau et pas un nombre.... :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

03 janv. 2007, 14:19

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

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

03 janv. 2007, 14:29

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.)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

03 janv. 2007, 14:46

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

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

03 janv. 2007, 15:27

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
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...