OVH Cloud OVH Cloud

Calcul sur des dates

3 réponses
Avatar
Steph.K
Bonjour,

J'ai un problème de date et cela fait 2 jours que je cherche sans
trouver de solution. Quelqu'un pourrait-il me mettre sur la bonne piste.

C'est pour un système de bon de commande automatisé.

J'ai un tableau avec différents jour de livraison :
$livraison=array('mercredi','vendredi');
ou n'importe quelle autre combinaison de jours mais toujours classé du
dimanche au samedi.

Je choisis une date dans le futur et je voudrais récupérer la date du
premier jour de livraison possible avant la date que j'ai choisi.

Par exemple, si je choisi comme date le jeudi 24 mars 2005, la date de
livraison doit être le mercredi 23 mars.

Si je choisis comme date le mercredi 23 mars 2005, la date de livraison
doit être le vendredi 18 mars.

Par avance merci,

--
Steph.K
http://www.acces-pour-tous.net

3 réponses

Avatar
Olivier Miakinen

J'ai un tableau avec différents jour de livraison :
$livraison=array('mercredi','vendredi');
ou n'importe quelle autre combinaison de jours mais toujours classé du
dimanche au samedi.

Je choisis une date dans le futur et je voudrais récupérer la date du
premier jour de livraison possible avant la date que j'ai choisi.

[exemples]


Il y a plein de solutions possibles pour calculer la date en temps réel,
mais si le tableau $livraison ne change pas toutes les cinq minutes il
pourrait valoir le coup de construire un autre tableau à partir de
celui-ci, mettons $jours_delai, indiquant pour chaque jour de la semaine
de combien de jours il faut remonter pour obtenir la date de livraison.

Dans ton exemple :
$livraison=array('mercredi','vendredi');

cela donnerait :
$jours_delai = array(
'jeudi' => -1,
'vendredi' => -2,

'samedi' => -1,
'dimanche' => -2,
'lundi' => -3,
'mardi' => -4,
'mercredi' => -5
);

Pour simplifier et ne pas me faire de n½ud au cerveau, je n'ai pas fait
commencer mon tableau $jours_delai à 'dimanche' : je suis parti du
lendemain du premier jour de $livraison, avec la valeur -1, puis j'ai
soustrait 1 jusqu'à ce que je rencontre le second jour de $livraison, le
lendemain de ce jour donnant -1, et ainsi de suite.

Facile !

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

Avatar
Steph.K
[...]
Il y a plein de solutions possibles pour calculer la date en temps réel,
mais si le tableau $livraison ne change pas toutes les cinq minutes il
pourrait valoir le coup de construire un autre tableau à partir de
celui-ci, mettons $jours_delai, indiquant pour chaque jour de la semaine
de combien de jours il faut remonter pour obtenir la date de livraison.


C'est justement parce que je m'embarquais dans des tableaux que je me
faisais des noeuds au cerveau ;-).
Entre temps je suis sorti prendre l'air, vivifiant, et j'ai trouvé une
méthode qui me convient tout à fait. Je pars de la veille de ma date, je
regarde si le jour est dans ma chaine $livraison ==> si oui ==> c'est la
bonne date ==> si non ==> je reboucle avec la date de l'avant veille etc.
C'est pas très propre mais je suis sûr de m'y retrouver dans 6 mois.

Facile !
Pas toujours autant qu'on voudrait.


Merci de ta réponse,

--
Steph.K
http://www.acces-pour-tous.net

Avatar
Marc

C'est justement parce que je m'embarquais dans des tableaux que je me
faisais des noeuds au cerveau ;-).
Entre temps je suis sorti prendre l'air, vivifiant, et j'ai trouvé une
méthode qui me convient tout à fait. Je pars de la veille de ma date, je
regarde si le jour est dans ma chaine $livraison ==> si oui ==> c'est la
bonne date ==> si non ==> je reboucle avec la date de l'avant veille etc.
C'est pas très propre mais je suis sûr de m'y retrouver dans 6 mois.


pourquoi ne pas gerer les jours de la semaine comme des entiers,
comme le font les fonctions de gestion de date.

apres, quand tu as un jour donné, c'est juste un exercice sur les
indexes dans 2 tableaux :
* le tableau des jours :
$jours = array(
'lundi' => 0,
'mardi' => 1,
'mercre' => 2,
...
);

* les dates de livraisons
$livraisons = array(2, 5);

a prioris, le jour de livraison, j est le premier nom immédiatement
supérieur trouvé dans la liste des livraisons. Si supérieur, prendre
le premier jour de livraison trouvé.