timestamps, durees et arrondis

Ufufy
Invité n'ayant pas de compte PHPfrance

20 juin 2006, 12:11

Bonjour :D !

Je voudrai juste quelques précisions... je m'explik:

Je calcule une durée, à laquelle je soutrait les samedi et dimanches (mais c pas le pbm)...

donc je fait (timestamp_date_fin - timestamp_date_debut)/(60*60*24)

mais parfois... le resultat n'est pas entier!!!! :shock:

J'ai vu sur php france qu'il fallait arrondir à l'inférieur la durée en jour. Mais se pose a moi 2 questions... :?:

1- d'ou provient ce décalage necessitant d'arrondir? :?

2- pourquoi arrondir à l'inférieur et non pas au supérieur?? car parmis mon jeu de tests, j'ai un 101 jour, 985333333 qui est renvoyé... devrais-je donc bien lire 101 jour, ou c'est 102??? (j'ai eu la flemme de compter... hihi) :roll:

Voila voilaaaa!!!!

Merc bôcoup pour vos précisions ^^ :P

Eléphant du PHP | 413 Messages

20 juin 2006, 13:00

salut,
le résultat de ton opération (101,985333333) donne un nombre de jours.
il vaut 101 jours + 0,98... jour.
0,98... jour = 0,98 * 24 heures = 0,98 * 24 * 60 minutes = etc...

donc en gros, ton intervalle, c'est 101 jours et quelques heures, minutes et secondes.

ensuite à toi de voir si tu veux l'entier au-dessus, ou au-dessous (selon ce que tu veux en faire).

en tous cas c'est parfaitement normal qu'une période entre 2 dates précises à la seconde près te donne un nombre de jour décimal.
--
Goeb

Ufufy
Invité n'ayant pas de compte PHPfrance

20 juin 2006, 14:02

muffff pourtant... entre le 1/05/2006 a 00:00:00 et le 1/06/2006 a 00:00:00 il y a bien pile poil 31 jours.... donc pourquoi si on passe en timestamp et ke l'on repasse en jours, on trouve 21 jours et quelques secondes....

Il y a bien un décalage!!!!

J'ai ce probleme sur différents intervalles. Tout ce que je veux, c calculée une durée en jours entre 2 dates!!!!

:cry: moi y'en a pas comprendre

Eléphant du PHP | 50 Messages

20 juin 2006, 14:06

Pourquoi a partir de ce moment là tu ne fait pas plutôt avec des dates ? Je crois qu'on peut trafiquer avec mktime pour faire des soustractions (à fouiller).

Ufufy
Invité n'ayant pas de compte PHPfrance

20 juin 2006, 14:16

Certes, on peux soustraire avec mktime, qui a pour fonction de passer une date en timestamp... le mystère reste entier!!!

voyez plutot j'ai esayé les deux pour vérifier mes timestamp:
	echo '<br />mktime '.mktime(00,00,00,06,01,2006);
	echo '<br /strtotime >'.strtotime($debut);
	echo '<br />mktime '.mktime(00,00,00,12,20,2006);
	echo '<br /strtotime >'.strtotime($fin);
	echo '<br />mktime-mktime '.(mktime(00,00,00,12,20,2006)-mktime(00,00,00,06,01,2006));
	echo '<br />strtotime - strtotime'.((strtotime($fin))-(strtotime($debut)));
	echo '<br />resultat en jours avec mktime '.((mktime(00,00,00,12,20,2006)-mktime(00,00,00,06,01,2006))/(60*60*24));
	echo '<br />resultat en jours avec strtotime'.((strtotime ($fin))-(strtotime ($debut)))/(60*60*24);
ce qui affiche dans le navigateur:

mktime 1149112800
1149112800
mktime 1166569200
1166569200
mktime-mktime 17456400
strtotime - strtotime17456400
resultat en jours avec mktime 202.041666667
resultat en jours avec strtotime202.041666667

Alors???? qui peux m'expliquer????

Invité
Invité n'ayant pas de compte PHPfrance

20 juin 2006, 14:18

PS voici le lien sur PHP france ou j'ai lu qu'il faut arrondir en dessous...

MAIS POURKOIIIIIIII?????

http://www.phpfrance.com/tutoriaux/inde ... -les-dates


Ensemble, nous percerons le mystere... ;-)

Invité
Invité n'ayant pas de compte PHPfrance

20 juin 2006, 14:23

d'ailleurs je viens de faire la verif, le topic qui explik k'il faut arrondir au dessous, ben ca depends...

Si les jours de debut et de fin on veux les inclure... je dois arrondir au dessus,

et oui du 01/06/06 au 20/12/06 INCLUS il y a 203 jours (tout rond)

Ufufy
Invité n'ayant pas de compte PHPfrance

20 juin 2006, 14:33

heu c con ce que je viens de dire... si je veux inclure les date depart et arrivé il faut que j'ajoute un jour au final... bref de toute facon le sujet n'est pas la! il n'empeche qu'il y a bien une erreur à la conversion....

Avouez que j'ai mis le doigt sur un truc la...

ca foire aussi avec 26/03/2006 et 20/06/2006 ....

Eléphant du PHP | 413 Messages

20 juin 2006, 17:23

as-tu regardé s'il n'y aurait pas un changement d'heure (été-hiver).
ça, ça peut conduire à un nombre de jour non entier.

en tous cas quand tu fais :
echo '<br />resultat en jours avec mktime '.((mktime(00,00,00,12,20,2006)-mktime(00,00,00,06,01,2006))/(60*60*24));
là c'est sûr que tu as un changement d'heure été-hiver !

.04166666667 jour correspond exactement à 1 heure.
--
Goeb

Ufufy
Invité n'ayant pas de compte PHPfrance

20 juin 2006, 18:18

hum hum... tu c ke t pas con toi????

bon OK pour heure été/hiver, j'avoue j'y avais pas songé une seule seconde.

Mais quand j'ai un .9583333333 qui sort c quoi alors????
ex: 29/05/2006 et 24/10/2006??? parcequ'il y a le passage a l'heure d'hiver... donc on déduit une heure.....

MERDE T UN GENIE!!!!

me reste plus qu'a verifier l'histoire d'arrondi (si c'est bien toujours un arrondi inferieur, parceke du coup suis pas bien sure)

apres verif sur php.net, il semblerai k'en php 5 on puisse utiliser un gestionnaire de fuseau horraire qui gere bocoup mieu le binz, a test!

Je vous tiens au jus!

vraiment THXXXX!!!

Eléphant du PHP | 413 Messages

21 juin 2006, 21:33

si t'es sûre de n'avoir que des heures 00:00:00, le plus simple est peut-être d'arrondir à l'entier le plus proche.

12.9583.. -> 13
12.0416... -> 12
--
Goeb

Ufufy
Invité n'ayant pas de compte PHPfrance

23 juin 2006, 15:49

en effet, contrairement à ce qui est dit dans le tuto de PHP France, il faut arrondir a l'entier le plus proche, resultat, passage heure d'été on arrondi au dessus, et passage heure d'hiver on arrondit au dessous....

Merci bocoup les gens ^^