Page 1 sur 1

Calcul sur des Dates/periodes/prix

Posté : 09 avr. 2011, 08:37
par .:GuG:.
Bonjour à tous.

Je cherche à faire un calcul assez complexe basé sur une date d'arrivée et une date de départ.
Imaginons 2 tables :
SAISON(#ID,NOM,PRIX) et PERIODE(#ID,ID_SAISON,DATE_DEBUT,DATE_FIN)
Ensuite un formulaire ou l'on saisie une date d'arrivée et un date de départ.
J'ai bien vu comment calculer un ecart entre 2 dates ici mais j'aimerai connaitre combien de jours sont dans telle ou telle période pour ensuite y appliquer un prix. Petite complication : j'octroierai une réduction au bout de 2 jours...
par exemple pour une durée de cinq jours le PRIX_TOTAL=(2xPRIX)+3x(PRIX*0,9)
... c'est pas évident à expliquer

J'avais quelque notion en php mais je me suis bien rouiller car n'ai pas pratiquer depuis quelques temps (trop de temps en fait :/ )

Si vous pouvez m'aider / m'orienter, ce serait bien sympa :)

Merci

Re: Calcul sur des Dates/periodes/prix

Posté : 09 avr. 2011, 10:47
par Ryle
Hello !

Si j'ai bien compris, une fois que tu as calculé ton nombre de jours en faisant la différence entre tes deux dates (avec le topic de la faq), un simple if() devrait te permettre de faire ton calcul :

Code : Tout sélectionner

SI nombreDeJour <= 2 prixTotal = nombreDeJour * prixUnitaire SINON prixTotal = 2 * prixUnitaire + (nombreDeJour - 2) * prixUnitaire * remise

Re: Calcul sur des Dates/periodes/prix

Posté : 09 avr. 2011, 21:21
par .:GuG:.
Bonsoir Ryle.
Ce bout de code irai dans la mesure ou la date d'arrivée et de départ sont dans la meme periode.
Imaginons, une durée de 3 jours, dont 2 jours en basse saison (une saison comporte plusieurs période non continue) et un jour en moyenne
le prix serai prixTotal = 2 * prixUnitaire_BasseSaison + ((nombreDeJour - 2) * prixUnitaire_MoyenneSaison * remise);

Faudrait-il faire une boucle "de jour arrivée à jour départ", qui a chaque jour, test la période à laquelle la date est affectée et ajouter à prixTotal le prix en question moins la remise au bout de x jours (2 en l'occurence) ?

ca risque d'etre chaud mais c'est surement faisable non ?

merci