gestion heure php

simon
Invité n'ayant pas de compte PHPfrance

03 déc. 2013, 22:12

Bonjour,

Je me tourne vers vous car je suis perdu et je ne comprends pas quelques chose. J'essaie d'ajouter 2 date entre elle. Or l'addition ne fonctionne pas mais la soustraction elle fonctionne et je ne vois pas la différence.
Le code :
			$h1=strtotime("07:30");
			$h2=strtotime("03:00");
			echo gmdate('H:i',$h1-$h2);
J'obtiens bien le résultat voulu ici : 04:30 mais si je remplace le - par le + alors la le résultat est erroné
			$h1=strtotime("07:30");
			$h2=strtotime("03:00");
			echo gmdate('H:i',$h1+$h2);
J'obtiens alors 02:01 et je ne comprend vraiment pas pourquoi quelle est la différence?

Merci d'avance

Eléphanteau du PHP | 46 Messages

04 déc. 2013, 00:07

bonjour

c'est logique !!

La fonction strtotime() essaye de lire une date au format anglais fournie par le paramètre time, et de la transformer en timestamp Unix (le nombre de secondes depuis le 1er Janvier 1970 à 00:00:00 UTC), relativement au timestamp now, ou à la date courante si ce dernier est omis.

http://php.net/manual/fr/function.strtotime.php

donc ,
$h1=strtotime("07:30"); // $h1 = int(1386073800)
$h2=strtotime("03:00"); // $h2 = int(1386057600)

dans ce cas si tu fais $h1-$h2 tu obtiens en secondes la différence entre les deux timestamp soit 4h30 une fois convertie en heures et minutes

mais si tu additionnes, la somme des 2 timestamp ne correspond à rien ...

de plus, "additionner" deux heures, je ne vois pas trop à quoi çà peut correspondre.
Quand tu dis que le résultat est erroné dans le cas de la somme, à quel résultat t'attends tu ?
Que peut bien valoir 7h30 + 3h00 ?
on peut additionner des durées, ca ok, mais des heures ... ?

en espérant t'avoir aidé
salutations.

simon
Invité n'ayant pas de compte PHPfrance

04 déc. 2013, 00:21

Oui ta réponse m'a éclairé, pour moi 7h30 + 3h00 = 10h30, mais je me suis peut être mal exprimé en parlant d'heures j’aurais peut-être du employé le terme de durée.

Eléphant du PHP | 79 Messages

04 déc. 2013, 00:33

Pour moi et pour n'importe quel début je trouve que l'exploitation de l'objet 'datetime' et juste parfait.
<?php

$datetime1 = new DateTime( '2009-10-11 12:39:09' );
$datetime2 = new DateTime( '2009-10-13 13:41:05' );

$interval = $datetime1-> diff( $datetime2 );

echo $interval-> format( '%Y-%m-%d %H-%i-%s' );

$diff = array();
$diff['annee']  = $interval-> format( '%Y' );
$diff['mois']   = $interval-> format( '%m' );
$diff['jour']   = $interval-> format( '%d' );
$diff['heure']  = $interval-> format( '%H' );
$diff['min']    = $interval-> format( '%i' );
$diff['sec']    = $interval-> format( '%s' );

print_r( $diff );
http://php.net/manual/fr/class.datetime.php
en lien avec le tableau des dates :
http://php.net/manual/fr/function.date.php

La gestion d’intervalle et assez sympa aussi !

Mammouth du PHP | 2278 Messages

04 déc. 2013, 11:24

Bien sûr qu'on a des occasions d'opérer sur des heures:
Si le tour part à 8h 47 et qu'on estime la durée de l'étape à 5h 45, à partir de quelle heure faut-il barrer les routes?
plussoyant mon prédécesseur:
http://us2.php.net/manual/fr/datetime.add.php
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD