Page 1 sur 1

timestamps, durees et arrondis

Posté : 20 juin 2006, 12:11
par Ufufy
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

Posté : 20 juin 2006, 13:00
par goeb
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.

Posté : 20 juin 2006, 14:02
par Ufufy
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

Posté : 20 juin 2006, 14:06
par Orni
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).

Posté : 20 juin 2006, 14:16
par Ufufy
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????

Posté : 20 juin 2006, 14:18
par Invité
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... ;-)

Posté : 20 juin 2006, 14:23
par Invité
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)

Posté : 20 juin 2006, 14:33
par Ufufy
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 ....

Posté : 20 juin 2006, 17:23
par goeb
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.

Posté : 20 juin 2006, 18:18
par Ufufy
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!!!

Posté : 21 juin 2006, 21:33
par goeb
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

Posté : 23 juin 2006, 15:49
par Ufufy
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 ^^