timestamps, durees et arrondis

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : timestamps, durees et arrondis

par Ufufy » 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 ^^

par goeb » 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

par Ufufy » 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!!!

par goeb » 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.

par Ufufy » 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 ....

par Invité » 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)

par Invité » 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... ;-)

par Ufufy » 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????

par Orni » 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).

par Ufufy » 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

par goeb » 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.

timestamps, durees et arrondis

par Ufufy » 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