8768 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai ce petit bout de code brouillon :

<?php
//délai de transport
 
$delai_livr=4;
 
//récupération de l'année en cours
 
$an=date("Y");
 
//ajout d'un jour pour les années bisextiles
 
if(cal_days_in_month(CAL_GREGORIAN,2,$an)===29){$bi=1;}else{$bi=0;}
 
//calcul du lundi férié de paques
 
$paq=date("z",strtotime(date("Y-m-d",strtotime(date("Y-m-d",easter_date($an))."+1 days"))));
 
//création du tableau des jours férié de l'année
 
$ferie=array(0,$paq,120+$bi,127+$bi,$paq+38,$paq+49,194+$bi,226+$bi,304+$bi,314+$bi,364+$bi);
 
//itération sur le délai de livraison
 
for($delai=0;$delai<$delai_livr;$delai++)
 
    {
 
    //si le numéro du jour correspond à un samedi ou dimanche ou si le numéro du jour est présent dans le tableau des jours fériés
 
    if((date("N",strtotime("+".$delai." days"))>5)OR(in_array(date("z",strtotime("+".$delai." days")),$ferie)))
 
        //on rajoute 1 jour dans le délai de livraison
 
        {$delai_livr=$delai_livr+1;}
 
    }
 
//récupération de la date de livraison
 
echo date("Y-m-d", strtotime("+".$delai_livr." days"));
?>


Il fonctionne très bien, mais impossible de tester avec des dates imposées avec http://sandbox.onlinephpfunctions.com/

Il doit bien y avoir un moyen de lui indiquer la date par exemple du 04/08/2018, pour vérifier le code par sécurité ?

Merci d'avance pour vos retours. Smiley smile
Modifié par Tintin75 (29 Oct 2018 - 20:55)
Bonjour Tintin,

Je ne suis pas certain d'avoir tout saisi et peut-être vais-je être à côté de la plaque mais tant pis, je prends le risque.

Si j'ai compris le script, tu calcul tous les jours fériés de l'année en cours et ce à chaque appel (drôle d'idée, il y a t'il un risque que ça change d'un jour à l'autre ?).

Mais tu récupère où la date du jours en cours ? Ou alors j'ai la berlue.

Autre chose, tel quel, tu considères que les jours fériés sont les mêmes pour tout le territoire (en imaginant que tu ais pris la précaution de n'appliquer ce script uniquement pour le territoire et non l'étranger). Es-tu obligé de mentir sur ton délai de livraison à certains ressortissants ? A moins bien sûr que tu ne dévoile ici que la partie émergée de l'iceberg.


L'idée peut sembler bonne au départ mais plus tu vas creuser plus tu vas te rendre compte de la réelle complexité de la chose. C'est pourquoi beaucoup ont abandonné lorsqu'ils se sont aperçus qu'ils multipliaient les lignes de code (je parle au bas mot de quelques centaines) sans arriver à couvrir tous les cas de figure.
La solution, qui semble être adoptée en grande majorité, est celle de se référer à la fourchette estimative fournies par le transporteur.
Là , selon moi, c'est plus aisément à ta portée.
Qu'en pense-tu ?
Modifié par Greg_Lumiere (30 Oct 2018 - 09:20)
Le code est pas pour passer en prod, mais pour étudier.
Ma question est il possible d'imposer une date via ce site.
en ce cas, je te renvois à la question "Mais tu récupère où la date du jours en cours ?"

Autrement qu'entends-tu par "imposer une date" ? S'agit-il de faire changer la date du serveur, auquel cas non. Sinon il faut déclarer une variable qui contient cette fameuse date "à imposer".

D'autre part, je ne comprends pas le rapport avec les années bissextiles qui, à mon sens, n'ont rien à voir avec la problématique que tu tentes résoudre. En effet, le délai de livraison est-il censé être plus ou moins long lorsqu'il s'agit d'une année bissextile ?

Sinon, pour ton étude, je ne saurais que te conseiller de te tourner vers la classe Datetime qui permet les manipulations (calcul de différence, ajout temporel, soustraction...) d'horodatage en tenant compte du calendrier réel (nombre de jours par mois, changements d'heures, nombre de jour dans un mois etc etc et tout ça en fonction du fuseau horaire voulu).


S'il m'était permit d'orienter vers une méthode à appliquer, je dirais qu'en premier lieu j'utiliserais une table qui répertorie les jours fériés par "secteur" (les jours uniquement ; si national, distinction Alsace/Moselle, si international, par pays en sus). Cette table peut-être alimentée facilement car il existe des listes officielles libres d'utilisation (en csv) qui reprennent déjà tous ces éléments; un coup de nettoyage (via un tableur par exemple) et l'affaire serait vite pliée pour des années de tranquillité. Ensuite mon script prendrait la date du jour à laquelle j'ajouterais le délai initialement prévu (ici 4j). Ensuite je comparerais avec ma table le jour et le mois afin de vérifier, en fonction du lieu de livraison bien sûr, si j'ai un matching number. Si c'est le cas j'applique +1. En même temps, je vérifie quel jour de la semaine ça tombe. Si c'est un samedi je fais +2 (si tant est que le transporteur n'achemine pas le samedi), si c'est un dimanche +1, si c'est dimanche férié +1, si c'est samedi férié +2.
Et là, j'obtiendrais un résultat proche de la réalité.
Enfin j'indiquerais quelque part sur mon site que ce délai est à plus ou moins 1 jour et indépendant des divers aléas qui peuvent se produire (carte sécurité activée).
Edit: Ha oui, je n'avais prêté attention à la boucle et effectivement si durant ce délai il y a un jour férié ça peut rallonger d'autant le délai.

Mais bon, je n'en fais rien car la permission ne m'a pas été donnée Smiley langue
Modifié par Greg_Lumiere (30 Oct 2018 - 10:15)
Je veux imposer au serveur de test, ma date pour faire des tests. Le but est juste de vérifier que ça fonctionne correctement.

Le but de la manœuvre est de pouvoir tester des dates que je lui indique, c'est tout. VERSION TEST !!!
Il n'y a pas moyen de lui imposer une date lui forcer la main, pour chuinter ? J'ai réussit à lui indiquer des jours et des heures.
Modifié par Tintin75 (30 Oct 2018 - 10:23)